13 trapbashスクリプトではセットアップできますが、bash関数ではセットアップできません。 たとえば、source以下のコードを実行してf、今すぐCtrl+を試してみてくださいC。 trapbash関数で設定する方法は? 4 trap ctrl_c INT 5 6 ctrl_c () { 7 echo "** Trapped CTRL-C" 8 } 9 10 11 f () { 12 for i in `seq 1 100`; do 13 sleep 1 14 echo -n "." 15 done 16 } bash trap — チェン ソース 2 あなたは置いてもよいfあなたのコードの末尾に、そしてからスペースを削除しますf ()。 — GWF
7 bashこれは、to (スクリプトを実行している)の代わりにフォアグラウンドのプロセスにSIGINTを送信するためです。これを行うには、関数を非同期にしてから使用しますwait(期待どおりに動作し、トラップを使用します)。 — クリスダウン ソース それは一種の作品です。しかしf、パイプ内にある場合echo 123 | f、それはトラップされていませんか? — チェン @Chengサブシェルを使用します(とにかくこの場合のパイプは不要です。単にheredoc / herestringを使用してください)。(command | command) & — クリスダウン
1 Protip:フォアグラウンド・プロセスがでQUIT A送るCtrl- - 、- 、- 動作していません。\CtrlCZD 実行終了時にトラップをクリア trap - list of signals here 非実稼働システムでの楽しみ:すべての賢明な信号(たとえば、KILLではない)にトラップを設定してみてください。 kill -l(それは小文字のLではなく、数字の1やパイプではありません|) — バリー・A ソース
0 関数をグローバルにする必要があると思います #!/bin/bash trap ctrl_c INT ctrl_c () { echo "** Trapped CTRL-C" } for i in `seq 1 100`; do sleep 1 echo -n "." done — harish.venkat ソース INTとSIGINT同義です-それは違いはありません。 — クリスダウン
f
あなたのコードの末尾に、そしてからスペースを削除しますf ()
。