2015-10-07 66 views
2

考慮一下我有一個很長的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

回答

3

您可以編寫一個啓動的功能:

function test { 
    "[email protected]" 
    local status=$? 
    if [ $status -ne 0 ]; then 
     echo "error with $1" >&2 
    fi 
    return $status 
} 

test command1 
test command2 
4

您可以執行trap "cmd" ERR,命令失敗時調用cmd。但是這個解決方案有兩個缺點。例如,它不會在管道內發現故障。

簡而言之,您最好是根據具體情況正確地進行錯誤管理。

+0

在這種情況下是否有一些簡單的方法來顯示失敗的命令? – redobot

1

可以測試$?的值或簡單地將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