매뉴얼 find
페이지에는 다음과 같이 나와 있습니다.
-execdir command {} +
항상 true를 반환하지만-execdir command {} ;
명령이 0을 반환하는 경우에만 true를 반환합니다.
그리고
종료 상태 모든 파일이 성공적으로 처리되면 find는 상태 0으로 종료되고, 오류가 발생하면 상태는 0보다 큽니다.
그러나 이것을 테스트하면 반대 동작이 나타납니다.
$ find . -execdir false '{}' \; ; echo $?
0
$ find . -execdir false '{}' \+ ; echo $?
1
누군가 이것을 설명할 수 있나요?
-exec
대신 사용하면 -execdir
동일한 결과를 얻습니다. 나는 노력 find (GNU findutils) 4.6.0
했고 4.4.2
.
답변1
이 "반환"은 종료 코드가 아니라 여러 작업을 함께 연결하는 데 사용되는 작업의 반환 값입니다 find
. 시도하는 경우:-execdir
find
find . -execdir false '{}' \; -print
그런 다음 -print
실행되지 않습니다(즉, 출력이 없음). 반면 둘 다:
find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print
각 경로를 인쇄합니다.
그러나 +
종료 코드를 사용하는 경우find
예set: 명령 호출이 0이 아닌 상태로 종료되면 0이 아닌 반면, a의 경우 ;
종료 코드는 명령 결과에 (직접적으로) 영향을 받지 않습니다. 그런 행동POSIX 요구 사항의 -exec
경우 감지할 수 없는 오류를 지적하고 싶습니다.
기본 표현식이 a로 구분되는 경우
<plus-sign>
기본 표현식은 항상 true로 평가되어야 하며 기본 표현식을 평가하는 경로 이름은 컬렉션으로 집계되어야 합니다. [...]호출이 종료 상태로 0이 아닌 값을 반환하는 경우 찾기 유틸리티는 0이 아닌 종료 상태를 반환해야 합니다..
-exec ... \;
종료 코드에 영향을 미치도록 지정되지 않았으므로 find
기본 동작은 오류가 발생하지 않는 한 0을 종료하는 것입니다. -exec ... \;
0이 아닌 값으로 종료되는 명령은 오류로 간주되지 않으므로 다른 오류가 없으면 종료 코드는 항상 0이 됩니다.