POSIXと互換性があるように変更しようとするBashで書かれたスクリプトがあります。 Bashのように、killall、CTRL + Cを使用してプロセスを終了したり、端末を閉じたときにEXITトラップを実行できないことを除いて、すべての操作を実行できました。これが私の出口トラップです。
#!/bin/sh
TMP=$(mktemp /tmp/countdown.XXXXX)
trap 'rm -rf $TMP' EXIT
ベストアンサー1
厳密なPOSIXシェルでは、実行またはスクリプトの最後のコマンドの実行によってEXIT
シェルが終了する前にトラップが評価されます。exit
シグナルによりシェルがシャットダウンした場合、実行されません。
をつかむには(「割り込み」信号)をCtrl+Cつかむ必要があります。INT
端末を閉じるとHUP
(「電話を切る」)、信号がスクリプトに送信される場合は、その信号もキャッチする必要があります。
trap 'rm -rf "$TMP"; trap - EXIT; exit' EXIT INT HUP
TERM
デフォルトでは、送信される一般的な「終了」信号をキャプチャすることもできますkill
。
上記のトラップは、EXIT
トラップが呼び出されないように明示的にリセットします。再びリストされたシグナルの1つを受信してスクリプトが終了した場合。