14

私はどこでも検索していて、グローバル変数を持つ以外にそれを行う方法はないと信じるようになりましたが、stackoverflow.comの第一人者が私を助けることができるかもしれないと信じています:

関数に引数を渡すことで関数をトラップする方法はbashにありますか?
たとえば、trap <function_name> <arg_1> <arg_2> SIGINT

4

3 に答える 3

26

trap任意のコマンド(またはコマンドのシーケンス)を指定できますが、そのコマンドを単一の引数として渡す必要があります。たとえば、これは次のとおりです。

trap 'foo bar baz | bip && fred barney ; wilma' SIGINT

これを実行します:

foo bar baz | bip && fred barney ; wilma

シェルがSIGINTを受信するときはいつでも。あなたの場合、それはあなたが望むように聞こえます:

trap '<function> <arg_1> <arg_2>' SIGINT
于 2012-02-29T18:43:22.040 に答える
2

多分私はあなたを誤解しています、しかし...これは合法です:

trap "cp /etc/passwd $HOME/p" SIGINT
trap 'cp /etc/passwd /tmp/p; echo wooo hoo' SIGINT
于 2012-02-29T18:43:42.020 に答える
1

意味が正しく理解できているかどうかはわかりませんが、シグナルハンドラーに関数を呼び出してパラメーターを渡させたい場合は、機能するtrap "function arg1 arg2" SIGNALはずです。たとえばtrap "ls -lh /" INT、シェルでCtrl + Cを実行すると、ls -lh /(2つの引数を持つプログラム)が呼び出されます。

于 2012-02-29T18:48:27.487 に答える