2013-10-25 32 views
0

如何使代碼波紋管作爲一般的功能,可用於整個腳本在bash:行動狀態殼牌功能

if [[ $? = 0 ]]; then 
    echo "success " >> $log 
else echo "failed" >> $log 
fi 
+0

你的意思是每一個命令之後自動執行呢? – anubhava

+0

相關並且非常有用:[編寫一個運行命令並記錄其退出代碼的封裝函數的最佳方法](http://stackoverflow.com/a/372​​120/1983854) – fedorqui

回答

2

你可能會寫命令執行的包裝:

function exec_cmd { 
    [email protected] 
    if [[ $? = 0 ]]; then 
     echo "success " >> $log 
    else 
     echo "failed" >> $log 
    fi 
} 

然後在腳本中使用以下函數執行命令:

exec_cmd command1 arg1 arg2 ... 
exec_cmd command2 arg1 arg2 ... 
... 
+0

as @fedorqui linked,'「$ @「'會讓生活在這裏更容易 – jozxyqk

+0

@jozxyqk是的,當然!已經更新了答案。謝謝! – hek2mgl

0

如果您不想包裝原件呼叫你可以使用一個明確的電話,如下所示

function check_success { 
    if [[ $? = 0 ]]; then 
     echo "success " >> $log 
    else echo "failed" >> $log 
    fi 
} 



ls && check_success 

ls non-existant 
check_success 
0

有沒有真正乾淨的方式來做到這一點。這很乾淨,可能夠好嗎?

PS4='($?)[$LINENO]' 
exec 2>>"$log" 

,將顯示在日誌中的每個命令運行,每個條目將與前一個命令的退出代碼開始...

0

你可以把這個.bashrc並調用它,每當

function log_status { [ $? == 0 ] && echo success>>/tmp/status || echo fail>>/tmp/status } 

如果您希望在每個命令後都可以提示寫入日誌(請注意原始PS1值已添加)。

export PS1="\$([ \$? == 0 ] && echo success>>/tmp/status || echo fail>>/tmp/status)$PS1" 

(我沒有這個經歷,或許PROMPT_COMMAND是一個更合適的地方把它)

甚至獲得更多的花哨和看到的結果與colours

我想你也可以用獲得的最後一個執行的命令發揮: