2008-10-29 34 views
1

在bash,我執行命令,並把結果在一個變量是這樣的:檢測一擊「出口」價值的失敗

export var=`svn ls`

但如果SVN由於某種原因失敗 - 說它返回非零錯誤代碼 - 導出仍然返回狀態代碼0.如何檢測執行的命令是否失敗?

回答

5
var=`svn ls` 
if [[ $? == 0 ]] 
then 
     export var 
else 
     unset var 
fi 

$?是最後執行的命令,這是svn ls這裏的退出代碼。

jmohr的解決方案既簡短又甜美。輕度改編,

var=`svn ls` && export var || unset var 

將大約相當於上面(一個有效的標識符的export永遠不會失敗,除非你已經做了一些可怕的和運行的環境空間)。採取任何你想要的 - 我使用unset只是爲了避免$var可能有價值,即使它沒有出口。

1

我有類似的問題,這是可以做到這樣的:

 
rm -f error_marker_file 
export var=`svn ls || touch error_marker_file` 

[ -f error_marker_file ] && echo "error in executing svn ls" 
+0

它的工作原理。我會堅持一個稍微優雅的解決方案 - 否則你已經掌握了它。 – 2008-10-29 17:41:32

2
var=`svn ls` && export var 
0
export FOO=$(your-command) || echo "your-command failed" 
+0

這不起作用,因爲問題指出:$?如果你這樣寫,你可以從「導出」設置,而不是「你的命令」。 – ephemient 2008-10-29 20:35:14