2017-08-24 2 views
3

関数が終了したときにbashがいくつかのコマンドを呼び出す可能性はありますか?私のようなものを意味する:関数の終了時のバッシュトラップ

function foo 
{ 
    # something like this maybe? 
    trap "echo \"exit function foo\"" EXIT 

    # do something 
} 

foo 

を、私はexit関数fooがプリントアウトされたいです。

答えて

4

はい、あなたはトラップRETURNことができます。

$ function foo() { 
> trap "echo finished" RETURN 
> echo "doing some things" 
> } 
$ foo 

trap組み込みのman bashの説明から

doing some things 
finished 

が表示されますのsigspecはRETURN、ある場合

コマンドの引数は、シェル関数またはスクリプトを実行するたびに実行されます。またはソース組み込み関数が実行を終了します。

+0

また、この関数の戻りコードもトラップできますか? – bercik

+1

いいえ。関数の今後のリターンコードに基づいて異なるアクションを実行する場合は、 'if'や' case'のような条件を使う必要があります。また、 'trap'はハンドラをグローバルに設定するので、' foo'の本体が '{{} 'であれば、' foo'が呼び出される前に存在していた 'RETURN' ..} 'command;' foo()(trap ...;) 'は呼び出しコンテキストに影響を与えません)。 – chepner

+1

これは、 'RETURN'のトラップに加えて、ゼロ以外の戻り値があれば' ERR'を発生させることができます。 1のリターンコードと2のリターンコードに対して異なるトラップを設定することはできません。 – chepner

関連する問題