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