Linux
防止 bash 腳本以非零退出程式碼退出
如果命令的退出程式碼大於 0,我需要阻止退出的 bash 腳本。這樣做的目的是回顯自定義錯誤消息。我目前的程式碼失敗,因為退出程式碼 > 0 並且我的 echo 語句永遠不會被執行。有沒有辦法默默地忽略非零狀態並列印我的自定義錯誤消息?
程式碼:
#/bin/bash # Faulty command lllll echo $? if [ "$?" -gt 0 ]; then echo "Please enter a valid command." fi
輸出:
./test.sh: line 4: lllll: command not found 127
你誤解了這個問題。
set -e
如果您通過添加到腳本中明確告訴它,Bash 只會在錯誤時退出。這裡發生的是該變數$?
保存最後一次命令執行的退出程式碼。在您的情況下,最後一個命令是echo $?
so,因為if [ "$?" -gt 0 ]
出現在 之後echo $?
,自成功後的值$?
將為 0echo
。試試這樣:#!/bin/bash # Faulty command lllll if [ "$?" -gt 0 ]; then echo "Please enter a valid command." fi
執行上面的腳本會產生:
$ foo.sh /home/terdon/scripts/foo.sh: line 4: lllll: command not found Please enter a valid command.
更簡潔的方法是隱藏錯誤消息:
#!/bin/bash # Faulty command lllll 2> /dev/null if [ "$?" -gt 0 ]; then echo "Please enter a valid command." fi
產生:
$ foo.sh Please enter a valid command.
而且,當然,你甚至不需要這樣
if
的東西:#!/bin/bash # Faulty command lllll 2> /dev/null || echo "Please enter a valid command."