나는 이것을 읽었다Q&A, 그러나 항상 인수를 파일로 처리하는 것 같습니다.
diff <(ls old) <(ls new)
명령을 다음에서 변경하고 싶습니다 .이 링크약간 중복되기는 하지만 두 개의 인수를 취하는 함수입니다.
나는 이것을 인수 교체로 시도했습니다.
d2c(){
diff <($1) <($2)
}
d2c "objdump -d foo1" "objdump -d foo2"
그런 다음 프로그램을 실행하십시오.d2c:1: no such file or directory: objdump -d foo1
그리고선입선출, 위의 문제는 여전히 존재합니다.
Q: "objdump -d foo1"과 같은 인수를 전달한 다음 명령으로 실행하려면 어떻게 해야 합니까?
답변1
실행할 명령의 이름이 아닌 쉘 코드로 $1
해석 하려는 것처럼 보이 므로 다음이 필요합니다.$2
d2c() {
diff <(eval " $1") <(eval " $2")
}
(이름이 로 시작하는 명령의 문제를 방지하려면 선행 공백에 유의하십시오 -
.)
d2c
또한 명령 주입 취약점이 발생할 위험을 제거 하려면 이러한 코드를 전달할 때 큰따옴표보다는 작은따옴표를 사용하는 것이 좋습니다 .
d2c 'echo "$var1"' 'echo "$var2"; echo "$var3"'
아니요
d2c "echo $var1" "echo $var2; echo $var3"
예를 들어.