첫째, http://explainshell.com에서-o
제공하는 옵션에 대한 설명이 완전히 정확하지 않을까 걱정 됩니다.
그 감안할 때 set
bulit이 제공 명령, 우리가 그 문서를 볼 수 있습니다 help
실행하여 help set
:
-o option-name
Set the variable corresponding to option-name:
allexport same as -a
braceexpand same as -B
emacs use an emacs-style line editing interface
errexit same as -e
errtrace same as -E
functrace same as -T
hashall same as -h
histexpand same as -H
history enable command history
ignoreeof the shell will not exit upon reading EOF
interactive-comments
allow comments to appear in interactive commands
keyword same as -k
monitor same as -m
noclobber same as -C
noexec same as -n
noglob same as -f
nolog currently accepted but ignored
notify same as -b
nounset same as -u
onecmd same as -t
physical same as -P
pipefail the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
posix change the behavior of bash where the default
operation differs from the Posix standard to
match the standard
privileged same as -p
verbose same as -v
vi use a vi-style line editing interface
xtrace same as -x
보시다시피 다음을 -o pipefail
의미합니다.
파이프 라인의 반환 값은 0이 아닌 상태로 종료하는 마지막 명령의 상태이거나 0이 아닌 상태로 종료 된 명령이없는 경우 0입니다.
그러나 그것은 말하지 않습니다 : Write the current settings of the options to standard output in an unspecified format.
이제는 -x
이미 알고있는 디버깅에 사용 -e
되며 스크립트의 첫 번째 오류 후에 실행이 중지됩니다. 다음과 같은 스크립트를 고려하십시오.
#!/usr/bin/env bash
set -euxo pipefail
echo hi
non-existent-command
echo bye
echo bye
때 라인이 실행되지 않습니다 -e
때문에 사용되는
non-existent-command
0을 반환하지 않습니다 :
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
-e
오류가 발생하더라도 Bash
자동 종료를 지시 하지 않았기 때문에 마지막 행이 없으면 인쇄 됩니다.
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
+ echo bye
bye
set -e
첫 번째 오류가 발생했을 때 스크립트가 중지되도록하기 위해 종종 스크립트 맨 위에 배치됩니다. 예를 들어 파일 다운로드에 실패한 경우 압축을 풀 수 없습니다.
set -uxo pipefail
).