下面是我的Ubuntu的機器上執行一段shell腳本代碼意想不到的結果:測試過程的返回狀態返回ubuntu上
myProcess
ret="$?"
if [ "${ret}" == "0" ]
then
echo good
else
echo bad "${ret}"
fi
因此,邏輯很簡單:如果myProcess
返回非零退出狀態,這是不好的,否則很好。我通過將它分離成單獨的腳本並從命令行運行它來測試了這段代碼。當myProcess
返回0時,我得到了預期的good
。
但是,當我在生產中運行它時,我得到了bad 0
。所以即使返回代碼似乎爲0,if
測試似乎會返回false
。這裏發生了什麼?
什麼是您的「shebang」行? '#!/ bin/bash'或#!/ bin/sh'? (現在看不出來,爲什麼這很重要,但是因爲你沒有顯示整個腳本,所以在用bash與原始Bourne Shell執行時可能會有不兼容)。祝你好運。 – shellter 2013-05-06 01:29:09
@shellter:它是'#!/ bin/sh'。另外,萬一它很重要,在生產中這個腳本會被作爲一個cron工作來執行。 – 2013-05-06 01:44:06
我不認爲bourne shell支持'=='..根據你的操作系統,你的'#!/ bin/sh'真的是Bash或者Bourne。首先嚐試'=',如果這不能解決問題,那麼用''X $ {ret} X「= X0X」','echo bad X $ {ret} X調試'ret'的實際值'。祝你好運 – shellter 2013-05-06 02:38:57