Shell多行命令脚本,当发生错误时自动退出
当写一个多行的shell脚本,发现前一个脚本发生错误,后面的脚本依旧会执行。
如果我们在控制台通过一行脚本完成多个命令可以这么写
1 | ls erroooooooooooor && echo 'not exec' |
将会输出1
> ls: cannot access 'erroooooooooooor': No such file or directory
如果erroooooooooooor,后面的命令不会执行
那如果我们写成脚本文件test.sh, 写成多行命令
1 | /bin/bash |
执行test.sh将会输出1
2> ls: cannot access 'erroooooooooooor': No such file or directory
> not exec
上面的脚本将会输出一行错误和一行not exec, 没有在错误发生时结束后面的脚本
那么我们将如何确保错误发生时,结束后续脚本呢?
我可以添加前面set -e 命令1
2
3
4
5
6/bin/bash
set -e
ls erroooooooooooor
echo 'not exec'
这次我们将得到和控制台执行命令一样的结果1
> ls: cannot access 'erroooooooooooor': No such file or directory
发生错误的后续命令脚本将不会执行
顺便说一下,如果在后续脚本控制流中取消错误退出命令,可以执行set +e命令