检查一个bash脚本中的所有命令退出代码

问题描述:

考虑一下我有一个很长的bash脚本和几个命令的情况。有没有简单的方法来检查ALL他们很容易退出状态。因此,如果出现故障,我可以显示哪个命令失败并返回代码。检查一个bash脚本中的所有命令退出代码

我的意思是,我不想使用测试每个其中的一个检查类似如下:

my_command 
if [ $status -ne 0 ]; then 
    #error case 
    echo "error while executing " my_command " ret code:" $? 
    exit 1 
fi 
+1

一旦命令失败,是否还有一点需要注意?通常不是相互依赖的任务。 –

+0

不,我想停止执行,清理并显示用户友好的退出语句 – redobot

您可以编写一个启动的功能:

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。但是这个解决方案有两个缺点。例如,它不会在管道内发现故障。

简而言之,您最好是根据具体情况正确地进行错误管理。

+0

在这种情况下是否有一些简单的方法来显示失败的命令? – redobot

可以测试$?的值或简单地将set -e放在脚本的顶部,这将导致它在任何错误的命令后退出。

#!/bin/sh 

set -xe 

my_command1 

# never makes it here if my_command1 fails 
my_command2 
+0

我编程的方式是对所有内容使用'set -xe',并在首次向用户报告错误时退出。我更新了这篇文章以反映这一点。 – 2015-10-07 13:09:28

+0

如果你想在'set -xe'下使用:hard_command ||如果你想硬连线一个命令来不触发程序在出错时退出。真正 – 2015-10-07 13:10:09