私はどこでも検索していて、グローバル変数を持つ以外にそれを行う方法はないと信じるようになりましたが、stackoverflow.comの第一人者が私を助けることができるかもしれないと信じています:
関数に引数を渡すことで関数をトラップする方法はbashにありますか?
たとえば、trap <function_name> <arg_1> <arg_2> SIGINT
?
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
多分私はあなたを誤解しています、しかし...これは合法です:
trap "cp /etc/passwd $HOME/p" SIGINT
trap 'cp /etc/passwd /tmp/p; echo wooo hoo' SIGINT
意味が正しく理解できているかどうかはわかりませんが、シグナルハンドラーに関数を呼び出してパラメーターを渡させたい場合は、機能するtrap "function arg1 arg2" SIGNAL
はずです。たとえばtrap "ls -lh /" INT
、シェルでCtrl + Cを実行すると、ls -lh /
(2つの引数を持つプログラム)が呼び出されます。