我有一個包含 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