Skip to content

set

set命令可以辅助脚本运行

环境变量

在命令行直接输入set,将输出所有的环境变量和shell函数

set -eux

  • -e:若命令返回值不等于0,则立即退出
  • -u:执行时使用到未定义过的变量时,显示错误信息并停止运行
  • -x:先输出命令,再输出其运行结果

set -e不适用于管道命令

管道命令指的是多个子命令通过管道运算符(|)组合成为一个大的命令。Bash会把最后一个子命令的返回值,作为整个命令的返回值。也就是说,只要最后一个子命令不失败,管道命令总是会执行成功,因此它后面命令依然会执行,set -e就失效了

可通过set -o pipefail解决此问题,-o pipefail的作用是一个子命令失败,整个管道命令就失败

小结

在每次shell脚本的开头加入以下set语句

set -eux
set -o pipefail

有助于脚本的调试和实现

对于无法编辑的脚本,可通过命令行传入set命令

$ bash -euxo pipfail script.sh

相关阅读