update-codegen.sh 几个set 命令
set -o errexit
set -o nounset
set -o pipefail
Bash 执行脚本的时候,会创建一个新的 Shell(执行环境),set命令用来修改 Shell 环境的运行参数。(参数清单)
命令行下不带任何参数,直接运行set,会显示所有的环境变量和 Shell 函数。
set -o nounset (set -u)遇到变量不存在,脚本应该报错,而不是默默地往下执行。
set -o xtrace (set -x)会打印脚本正在执行的命令,行首以+表示。这对于调试复杂的脚本是很有用的。
set -o errexit (set -e) (set +e) 脚本只要发生错误,就终止执行。(
+e
表示关闭 -e
表示重新打开)
set -e
有一个例外情况,就是不适用于管道命令。
管道命令,就是多个子命令通过管道运算符(|)
组合成为一个大的命令。Bash 会把最后一个子命令的返回值,作为整个命令的返回值。只要最后一个子命令不失败,管道命令总是会执行成功,因此它后面命令依然会执行,set -e就失效了。
set -o pipefail 只要一个子命令失败,整个管道命令就失败,脚本就会终止执行。
set -e 其他的命令行写法
#只要command有非零返回值,脚本就会停止执行
$command || exit 1
#如果停止执行之前需要完成多个操作,就要采用下面三种写法。
# 写法一
command || { echo "command failed"; exit 1; }
# 写法二
if ! command; then echo "command failed"; exit 1; fi
# 写法三
command
if [ "$?" -ne 0 ]; then echo "command failed"; exit 1; fi