zsh에서 -exec 찾기: 에코는 예상대로 작동하지만 인쇄는 작동하지 않습니다.

zsh에서 -exec 찾기: 에코는 예상대로 작동하지만 인쇄는 작동하지 않습니다.

다음 두 명령이 동일한 결과를 출력할 것이라고 생각했지만 그렇지 않습니다.

명령 1:

찾다. -name 파일명-exec print '{}' \;

명령 2:

찾다. -name 파일 이름-exec echo '{}' \;

실제로,명령 2예상대로 작동합니다. filename아래의 모든 인스턴스의 상대 경로를 인쇄합니다..

그러나명령 1출력에서 가능한 한 많은 줄을 얻습니다.명령 2, 그러나 경로를 제공하는 대신 각 줄에는 다음과 같이 표시됩니다.

find: print: No such file or directory

또한 {} 주변의 따옴표를 제거해 보았습니다.

두 번째 명령이 예상대로 작동하지 않는 이유는 무엇입니까? 왜 각 인스턴스의 경로를 인쇄하지 않습니까 filename?

답변1

비교:

% whence -a print
print
% whence -a echo
echo
/bin/echo

print이는 내장 프로그램으로만 존재하지만 echo내장 프로그램과 실행 파일 모두로 존재 함을 나타냅니다 . (실제로 위에 표시된 것처럼 별칭, 함수 또는 예약어 print가 될 수 있으며 이름이 나타내는 내부 객체의 유형을 정확히 확인하는 데 사용됩니다.)echowhence -w

find외부 명령이므로 내장 셸을 호출할 수 없습니다. 실제로 셸의 내장 함수를 호출해야 하는 경우 셸을 명시적으로 호출하세요.

find . -name filename -exec zsh -c 'print "$0"' '{}' \;

이 경우 zsh의 내장된 print-in: 주요 기능이 작업을 올바르게 수행하는 것을 원하지 않는다고 생각합니다 (zsh의 내장 확장 백슬래시).find-printprint

find . -name filename -print

( 작업이 지정되지 않은 경우 기본 작업 -print이므로 생략할 수도 있습니다 .)-printfind

echo외부 실행 파일이 존재하지만 호출되지 않는 이유 printecho표준 명령이기 때문에 쉘 없이 호출하려는 프로그램에서도 활용도가 극대화되기 때문이다. 대신 printzsh에만 적용되므로 처음에는 zsh 스크립트만 사용합니다.

print(아, 그리고 내 시스템에는 파일을 프린터로 보내는 명령이 있습니다 .)

답변2

find"-exec"로 지정한 것과 일치하는 명령을 PATH에서 검색합니다. echo실제로는 시스템의 바이너리입니다(저에게는 그랬습니다 /bin/each).

print대조적으로, 이는 시스템에 있는 바이너리가 아니라 쉘 내장입니다(찾아보세요).여기) 여기서 find를 실행할 수 없습니다.

관련 정보