我一直在编写一些shell脚本,如果能够在任何命令失败的情况下暂停执行所述shell脚本,我会发现它很有用 . 请参阅下面的示例:
#!/bin/bash
cd some_dir
./configure --some-flags
make
make install
因此,在这种情况下,如果脚本无法更改为指示的目录,那么如果失败,它肯定不会在之后执行./configure .
现在我很清楚我可以检查每个命令(我认为这是一个绝望的解决方案),但是如果其中一个命令失败,是否有一个全局设置使脚本退出?
7 回答
我认为你要找的是
trap
命令:有关更多信息,请参阅this page .
另一种选择是在脚本顶部使用
set -e
命令 - 如果任何程序/命令返回非true值,它将使脚本退出 .一个成语是:
我意识到这可能会变长,但对于较大的脚本,您可以将其分解为逻辑功能 .
这是怎么做的:
与
pipefail
结合使用 .-e(errexit):当命令以非零状态退出时,在第一次出错时中止脚本(除了在while或while循环中,if-tests,list构造除外)
-o pipefail:使管道返回管道中返回非零返回值的最后一个命令的退出状态 .
Chapter 33. Options
要在其中一个命令失败后立即退出脚本,请在开头添加:
当某些不属于某些测试的命令(如在
if [ ... ]
条件或&&
构造中)以非零退出代码退出时,这会导致脚本立即退出 .使用set -e内置:
或者,您可以在命令行上传递
-e
:您还可以使用
set +e
禁用此行为 .(*) 注意:
(来自
man bash
)适用于第一行的已接受答案的替代方案: