" 모든 명령은 모든 이전 명령에 의존합니다. 모든 명령이 실패하면 전체 스크립트가 실패해야합니다 "라는 말을 들었습니다. 오류를 처리하기 위해 특별한 기능이 필요하지 않다고 생각합니다.
필요한 것은 &&
오퍼레이터 및 ||
연산자 와 명령을 연결 하는 것입니다.
예를 들어,이 체인은 끊어지고 이전 명령 중 하나 라도 끊어지면 "뭔가 잘못되었습니다"를 인쇄 합니다 (bash는 왼쪽에서 오른쪽으로 읽습니다)
cd foo && rm a && cd bar && rm b || echo "something went wrong"
실제 예 (실제 데모 용으로 dir foo, file a, dir bar 및 file b를 만들었습니다) :
gv@debian:/home/gv/Desktop/PythonTests$ cd foo && rm a && cd bar && rm bb || echo "something is wrong"
rm: cannot remove 'bb': No such file or directory
something is wrong #mind the error in the last command
gv@debian:/home/gv/Desktop/PythonTests$ cd foo && rm aa && cd bar && rm b || echo "something is wrong"
rm: cannot remove 'aa': No such file or directory
something is wrong #mind the error in second command in the row
마지막으로 모든 명령이 성공적으로 실행되면 (종료 코드 0) 스크립트는 계속 진행됩니다.
gv@debian:/home/gv/Desktop/PythonTests$ cd foo && rm a && cd bar && rm b || echo "something is wrong"
gv@debian:/home/gv/Desktop/PythonTests/foo/bar$
# mind that the error message is not printed since all commands were successful.
기억해야 할 것은 &&를 사용하면 이전 명령이 코드 0으로 종료되면 bash의 경우 성공을 의미합니다.
체인에서 명령이 잘못되면 명령 / 스크립트 / 다음에 오는 것이 무엇이든 || 실행됩니다.
그리고 기록을 위해, 파산 한 명령에 따라 다른 작업을 수행 해야하는 경우 $?
정확히 이전 명령의 종료 코드를보고하는 값을 모니터링하여 클래식 스크립트로 수행 할 수도 있습니다 (명령이 성공적으로 실행되면 0을 반환 함) 또는 명령이 실패한 경우 다른 양수)
예:
for comm in {"cd foo","rm a","cd bbar","rm b"};do #mind the error in third command
eval $comm
if [[ $? -ne 0 ]];then
echo "something is wrong in command $comm"
break
else
echo "command $comm executed succesful"
fi
done
산출:
command cd foo executed succesfull
command rm a executed succesfull
bash: cd: bbar: No such file or directory
something is wrong in command cd bbar
팁 : "bash : cd : bbar : No such file ..."메시지를 적용하여 억제 할 수 있습니다. eval $comm 2>/dev/null