POSIX 終了トラップ

POSIX 終了トラップ

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つを受信して​​スクリプトが終了した場合。

おすすめ記事