-exec에 대한 찾기 매뉴얼을 읽고 있습니다.주문하다{} 스위치 섹션. 이는 셸 해석을 방지하기 위해 {}를 인용해야 함을 나타냅니다.
나는 이 동작을 성공하지 못한 채 로컬에서 재현하려고 시도했으며 이 설명이 어떤 맥락에서 적용되는지 알고 싶습니다.
이 설명이 제대로 작동하도록 하기 위해 내가 하고 있는 일은 다음과 같습니다.
echo "Hi" > f1
touch -- \$\(ls\ \-la\) -n
find ./ -type f -exec cat {} +
기본적으로 악성 파일명을 파싱할 때 스위치나 명령을 해석하려고 할 뿐이지, 사람이 제안한 대로 해석되지는 않습니다.
내가 무엇을 놓치고 있나요?
또는 다른 명령 대신 cat을 명령으로 사용하여 이와 같은 코드 줄을 활용할 수 있는 방법이 있습니까?
답변1
많은 쉘에서 중괄호는 중괄호 확장을 시작합니다. 그러나 sh 호환 쉘인 Zsh 및 (t)csh는 여전히 일반 내용을 유지합니다 {}
. 그러나 적어도 Fish 쉘은 그렇지 않습니다. unquote를 제거한 {}
다음 예를 들어 echo {}
빈 줄만 출력합니다. 이렇게 하면 find
사용된 명령이 중단되므로 {}
중괄호를 인용해야 합니다.
find
이는 채워진 후 쉘 확장을 위해 처리되는 파일 이름과 관련이 없습니다. 이 시점에서 쉘을 명시적으로 호출하지 않는 한 쉘은 관련되지 않습니다.