trap
部分のダッシュマンページ氏名は次のとおりです。
罠引数を取らない場合、シグナルのリストと関連するアクションは特定の形式で標準出力に書き込まれます。同じキャプチャ結果を得るためのシェル入力として適しています。
素晴らしい!私はtrap
この出力をコマンドでシェルに戻し、上書きされた古いシグナルハンドラを復元する簡単な方法を見つけたようです。
trap "echo 'good'" EXIT
# save signal handlers to $traps
traps="$(trap)"
# override EXIT handler
trap "echo 'bad'" EXIT
# reinstate original handlers
eval "$traps"
希望の出力:good
実際の出力:bad
これは空であるため、完全に論理的であり、$traps
マンページとも一致します。
シェルがサブシェルから分岐したら、キャプチャされた(無視されない)シグナルをデフォルトアクションにリセットします。
(コマンド置換は$(trap)
サブシェルを分岐するため、シグナルハンドラtrap
については知りません。)
すべてが正常に動作しているようです。しかし、trap
リスト機能をどのように活用しますか?
答え1
一時ファイルにリダイレクトできます。
file=$(mktemp) || exit
{
rm -f -- "$file"
trap
traps=$(cat)
} > "$file" < "$file"
これに関してPOSIXではありませんdash
。trap
POSIX には以下が必要です。それ:
var=$(trap)
トラップがサブシェルからリセットされない特別なケースと見なされます。
zsh
そして、mksh
このような問題もあります。ただし、zsh
次のことができます。
trap | IFS= read -rd '' traps