2014-06-05 139 views
0

OS = Mac OS X.
殼是bash。爲什麼不從mkdir返回代碼?

我想驗證在shell腳本中創建一個目錄。但是,我似乎沒有得到一個返回碼。這裏是shell代碼:

#!/bin/bash 

rv=$(mkdir lib) 
echo "The code = $rv !" 

if [ "$rv" == "0" ] 
then 
    echo "created the dir" 
else 
    echo "no can do, compadre." 
fi 

和輸出:

mkdir: lib: File exists 
The code = ! 
no can do, compadre. 

與否的目錄中創建,該else條件始終爲真,因爲$rv變量是從來沒有「0」。但它似乎沒有任何整數。手冊頁說

DIAGNOSTICS 
    The mkdir utility exits 0 on success, and >0 if an error occurs. 

谷歌搜索沒有成功。任何幫助表示讚賞。

回答

5

當你寫rv=$(mkdir lib),你捕捉mkdir輸入rv,而不是它的返回碼。您可以通過讀取$?變量來訪問最後一條命令的返回碼,如

mkdir lib 
rv=$? 
+0

謝謝!就是這樣。我會標記它的答案,當我讓我(8分鐘去)。 – MadConan

+0

作爲後續:如果我有捕獲標準輸出,爲什麼'mkdir:lib:文件存在'仍然使它到控制檯,而不是被存儲在'rv'中? – MadConan

+0

@MadConan可能是因爲它被打印到標準錯誤(stderr),而不是標準輸出。 –

1

我不知道你使用的符號是否應該工作,但我知道的是,命令$?允許你檢索最後的返回值。

您的代碼不我自己的電腦上工作,要麼,但這一作用:

#!/bin/bash 

mkdir lib 
rv=$? 
echo "The code = $rv !" 

if [ "$rv" == "0" ] 
then 
    echo "created the dir" 
else 
    echo "no can do, compadre." 
fi 
+0

謝謝。你的原始答案有'rv = $!',這是行不通的。我看到你編輯了它,但伊斯梅爾第一次做對了。 – MadConan

+0

確實,當我在發佈代碼幾秒後測試代碼時,我發現我錯了。 – julienc

2

的返回碼將是$?

mkdir lib 
echo $? 
相關問題