我是bash的初學者,所以如果這是一個基本問題或有語法問題,但我無法在任何地方找到答案,我表示歉意。我想運行一個命令,如果失敗,請檢查錯誤消息是否與某個字符串匹配。這是我有:僅在bash中存儲錯誤消息
err_msg=`./command input.txt 2>&1`
if [$? -eq 1]
then
if [err_msg -eq "Error: timeout"]
then
#do something
fi
fi
這是正確的方法來做到這一點?如果我使用第一行來定義錯誤消息err_msg,那麼$?仍然存儲命令的通過/失敗狀態?另外,如果命令通過會發生什麼? err_msg會是空白嗎?
你有一些語法錯誤:1,留出空間周圍的字符'['和']':這些都是內建的,需要有一個空間周圍的空間被認可。 2.不要使用-eq來測試字符串是否相等。改用'='。回覆。你的問題:是的,'$?'將擴展到命令的返回碼。 –
謝謝!另外,如果err_msg是第二個if語句中的$ err_msg,因爲它是一個變量? –
是的,當然,你想檢查'err_msg'的擴展。您還需要_quote_這個擴展:''$ err_msg「',除非您使用更強大的關鍵字'[[''。 –