나는 단지 다음 진술이 무엇을 의미하는지 그리고 그것이 올바른지 이해하고 싶습니다.
test -x /usr/bin/find || exit 0
Command 1
Command 2
Command 3
의 출력은 test -x /usr/bin/find
항상 0입니다. 이는 종료 0 명령이 실행된다는 의미이며, 이는 명령 1, 2, 3이 절대 실행되지 않음을 의미합니다. 내가 여기 있나요?
답변1
test -x /usr/bin/find
(또는 [ -x /usr/bin/find ]
) 아무것도 출력하지 않습니다. 테스트는 다음과 같습니다.진짜/usr/bin/find
기존 실행 파일인 경우잘못된경로 이름이 존재하지 않거나 실행 가능하지 않은 경우.
성공적으로 종료 되면 test
(종료 상태가 0, 즉 "오류 없음"을 의미함) 쉘은 나머지 명령을 실행합니다. 종료에 실패하면(0이 아닌 종료 상태, "일부 오류"를 나타냄) exit 0
현재 셸이 종료되어 나머지 명령이 실행되지 않습니다.
틀림없이 찾을 수 없을 때 사용 exit 1
하거나 교체하는 exit
것이 좋습니다 . 종료 상태(0이 아님)에 마스크를 사용하고 이 스크립트의 호출자가 지정된 위치에서 실패한 조회에 대한 알림을 받지 않도록 합니다.exit 0
find
/usr/bin
exit 0
test
find
셸에서 부울로 테스트할 때 종료 상태 0이 "true"로 평가된다는 사실과 관련됩니다.
사용과 관련이 ||
있으며 &&
일반적으로 말하면:
답변2
아니요, 그들은 항상 처형당했습니다. (모든 POSIX 셸에서 유사 하게 man bash
작동합니다):
An OR list has the form
command1 || command2
command2 is executed if, and only if, command1 returns a non-zero exit
status.
test -x /usr/bin/find
0이 반환 되므로 command2( exit 0
이 경우)는 실행되지 않고 스크립트는 계속 실행됩니다.