実行中のシェルを強制終了せずにシェル関数を非対話的に終了する方法はありますか?
シグナル (例: ) に応答する方法をシェルに指示できることはわかっていますがUSR1
、シグナル ハンドラーが関数を終了する方法がわかりません。
必要に応じて、終了する関数が「終了可能」になるように (つまり、いくつかの適切なオプションを宣言することによって) 記述されていると想定することができます。
(私の直接の関心は、 に対してこれを行う方法ですが、および に対してzsh
行う方法にも興味があります。)bash
/bin/sh
編集: ロブ ワットの提案に応えて:
% donothing () { echo $$; sleep 1000000 }
% donothing
47139
この時点でCtrl-C
、シェルを実行しているのと同じ端末でヒットすると、関数donothing
は実際に終了し、コマンド プロンプトが返されます。しかし、代わりに、別のシェルセッションから実行すると、
% kill -s INT 47139
...donothing
関数は終了しません。