접근의 유형 if...then...fi
및 &&
/ 또는 ||
유형은 우리가 테스트하고자하는 명령에 의해 종료 된 종료 상태를 처리 한다는 점에 유의해야합니다 (성공시 0). 그러나 일부 명령은 명령이 실패했거나 입력을 처리 할 수없는 경우 0이 아닌 종료 상태를 리턴하지 않습니다. 이것은 일반적인 명령 if
과 &&
/ ||
접근 방식이 특정 명령에 대해 작동하지 않음을 의미 합니다.
예를 들어, Linux file
에서 존재하지 않는 파일을 인수로 받고 find
지정된 파일 사용자를 찾을 수없는 경우 GNU는 여전히 0으로 종료 됩니다.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
이러한 경우 상황을 처리 할 수있는 잠재적 인 방법 중 하나는 stderr
/ stdin
메시지 file
와 같이 명령에 의해 반환 된 메시지를 읽거나와 같이 명령 출력을 구문 분석하는 것입니다 find
. 이를 위해 case
진술을 사용할 수 있습니다.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(이것은 unix.stackexchange.com 에서 관련 질문에 대한 내 자신의 답변을 다시 게시 한 것입니다 )