トラップを含むシェルスクリプトがありますが、トラップは期待通りに動作しないようです。以下はコードとbashバージョンです。
GNU bash、バージョン 4.2.46(2) リリース (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 マニュアル:
シェル実行環境のすべての側面は、関数とその呼び出し元の間で同一ですが、次の例外があります: 関数に組み込みを
trace
使用して属性が指定されているかdeclare
、組み込み-o functrace
でオプションが有効になっている場合set
を除き、DEBUG トラップと RETURN トラップは継承されません (この場合、すべての関数は DEBUG トラップと RETURN トラップを継承します)。また、シェル-o errtrace
オプションが有効になっている場合を除き、ERR トラップは継承されません。