トラップが機能しない

トラップが機能しない

トラップを含むシェルスクリプトがありますが、トラップが期待どおりに機能しないようです。以下はコードと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

おすすめ記事