Automatically exit when bash command produce return code non zero
在bash中,如果命令行返回代码不是零,如何使脚本自动退出。例如:
1 2 3 4 5 6
| #!/bin/bash
cd /something_something
mv file_a /somedir/file_a # this produce an error
echo $? # This produce a non-zero output
echo"We should not continue to this line" |
我知道我们可以用#!/bin/bash -x调试bash脚本,但有时脚本太长,运行太快,我们错过了重要的错误。
我不想继续写作[[ $? -ne 0 ]] && run next_command
- 您可以使用set -e或#!/bin/bash -e。
- ^^+否则称为"错误退出"标志
- EDOCX1?2?
- @阿努巴瓦,谢谢,这就是我需要的。奇怪的是,我的bash --help并没有显示出这个选项,不管怎样,它是有效的。你能把它当作答案移动一下吗?
- 注意bashfaq 105,描述为什么你要求的是一个坏主意。不可能分辨出"x返回的值为假"和"x失败"之间的区别,很多东西返回非零退出状态的原因并不是实际失败。更糟糕的是,set -e有很多启发性的方法来猜测这些情况,它们在不同的外壳(以及相同外壳的释放)之间是不同的,这些差异会导致意外/破坏。
- 对于选项-e,请查看help set。
- 顺便说一句,cd /something_something || exit或|| return是一种更好的方法来进行显式错误处理,而不是[[ $? -ne 0 ]] && ...。在下面的行中检查$?是一种不好的做法,因为其他原因——它不仅冗长,而且很容易通过添加日志或其他无意中修改$?的更改来破坏流控制逻辑。
使用set -e有很多问题。只需将命令与&&联接,并用if语句测试结果。
1 2 3 4 5
| if cd /something_something && mv file_a /somedir/file_a; then
echo $?
exit
fi
echo"Both cd and mv worked" |