Linux

防止 bash 腳本以非零退出程式碼退出

  • September 30, 2022

如果命令的退出程式碼大於 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 $?,自成功後的值$?將為 0 echo。試試這樣:

#!/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."

引用自:https://unix.stackexchange.com/questions/719318