2017-08-03 77 views
1

我在嘗試使用以下1內膽bash shell命令來發出自定義錯誤消息。我沒有收到「errorMessage」var集。但是,如果我單獨運行該命令,我可以將錯誤消息捕獲到$ errorMessage變量中。 我錯過了什麼?Linux Bash Shell自定義錯誤消息

命令:

[ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}" 

試驗/輸出:

$ [ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}" 
Something Went Wrong; Error is: 
$ echo $errorMessage 

$ errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1) 
$ echo $errorMessage 
mkdir: cannot create directory `/path': Permission denied 
+0

順便說一句,在這個問題上,這是一個相當有問題的問題,對於新來的人來說,情況往往是這樣。感謝您花時間幫助您輕鬆解決問題! –

回答

2

[是命名test命令;當沒有指定要運行的單個測試的參數時,缺省值爲-n(測試字符串是否爲空)。此代碼正在測試字符串"errorMessage="(可能帶有來自mkdir的stderr的後綴)是否爲空;因爲它包含一個固定的前綴,它將從不爲空,無論是否發生任何錯誤。

如果要真正地賦值給變量,那反而會看起來像:

errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1) \ 
    || echo "Something Went Wrong; Error is: ${errorMessage}" 

這是檢查退出狀態的mkdir和運行echo應該說是非零。

+0

太棒了!這對我行得通。 – MaxGrand