陷阱不工作

陷阱不工作

我有一個包含 trap 的 shell 腳本,但 trap 似乎沒有按預期工作,以下是程式碼和 bash 版本

GNU bash,版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)

set -e
function exit_message(){
  echo -e "\e[31m\nError occurred "
}
function login(){
  false
}
trap exit_message ERR
login

如果我這樣做的話,上面的陷阱就會起作用

function login(){
  trap exit_message ERR
  false
}

答案1

bash 手冊:

shell 執行環境的所有方面在函數及其呼叫者之間都是相同的,但有以下例外:DEBUG 和 RETURN 陷阱不會被繼承,除非已trace使用內建函數為該函數指定了屬性declare,或-o functrace已使用以下命令啟用了該選項內建函數(在這種情況下,所有函數都會繼承 DEBUG 和 RETURN 陷阱),除非啟用了 shell 選項,set否則不會繼承 ERR 陷阱。-o errtrace

相關內容