명령 대신 파일로 전달된 공백이 있는 셸 인수

명령 대신 파일로 전달된 공백이 있는 셸 인수

나는 이것을 읽었다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"

예를 들어.

관련 정보