检查一个bash脚本中的所有命令退出代码
考虑一下我有一个很长的bash脚本和几个命令的情况。有没有简单的方法来检查ALL他们很容易退出状态。因此,如果出现故障,我可以显示哪个命令失败并返回代码。检查一个bash脚本中的所有命令退出代码
我的意思是,我不想使用测试每个其中的一个检查类似如下:
my_command
if [ $status -ne 0 ]; then
#error case
echo "error while executing " my_command " ret code:" $?
exit 1
fi
您可以编写一个启动的功能:
function test {
"[email protected]"
local status=$?
if [ $status -ne 0 ]; then
echo "error with $1" >&2
fi
return $status
}
test command1
test command2
您可以执行trap "cmd" ERR
,命令失败时调用cmd
。但是这个解决方案有两个缺点。例如,它不会在管道内发现故障。
简而言之,您最好是根据具体情况正确地进行错误管理。
在这种情况下是否有一些简单的方法来显示失败的命令? – redobot
可以测试$?
的值或简单地将set -e
放在脚本的顶部,这将导致它在任何错误的命令后退出。
#!/bin/sh
set -xe
my_command1
# never makes it here if my_command1 fails
my_command2
我编程的方式是对所有内容使用'set -xe',并在首次向用户报告错误时退出。我更新了这篇文章以反映这一点。 – 2015-10-07 13:09:28
如果你想在'set -xe'下使用:hard_command ||如果你想硬连线一个命令来不触发程序在出错时退出。真正 – 2015-10-07 13:10:09
一旦命令失败,是否还有一点需要注意?通常不是相互依赖的任务。 –
不,我想停止执行,清理并显示用户友好的退出语句 – redobot