先简单看下set指令常见使用,如下:
set -o errexit 等价与set -e 比较好理解,遇到指令运行后返回非0 就返回终止
set -o nounset 等价于set -u
set -o xtrace 等价于set -x
set -o pipefail 适用于管道命令
分析下:管道命令中的最后一个子命令的返回值作为整个管道的返回值,也就是说当管道中前面的命令出现错误但只要最后的子命令可以执行成功时,在整个管道命令的后续如果还有命令的话会继续执行(set -e此时会失效),set -o pipefail就是为了防止这种情况发生,也即只要管道命令中的子命令出现执行错误(也即返回非0),整个管道后续的命令将不会执行。
以上4种情况合并写:
①、
set -uxeo pipefail
②、
set -uex
set -o pipefail
参考:写的非常到位
http://www.ruanyifeng.com/blog/2017/11/bash-set.html?utm_source=tool.lu