TEMPファイルなしでトラップを復元します
-
09-12-2019 - |
質問
引数なしtrap
はすべてのトラップの現在設定されているコマンドを印刷します。ただし、サブシェルはトラップを継承しませんので、トラップを保存および復元するための正規の例はBASHで失敗します。
save_traps=$(trap) ... eval "$save_traps".
代入のRHSのトラップはサブシェルで実行されるため、save_trapsは常に空の文字列です。trap
の出力を一時ファイルに書き込む以外に、スクリプトはトラップの現在のコマンドを見つけるのですか?
解決
は私のために働いています。
サンプルトラップを作成する:
$ trap
$ trap echo SIGIO
$ trap
trap -- 'echo' SIGIO
.
トラップをsave_traps
に保存します。
$ save_traps=$(trap)
.
削除:
$ trap SIGIO
$ trap | wc -l
0
.
復元:
$ eval "$save_traps"
$ trap
trap -- 'echo' SIGIO
.
テスト済み:
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
. 他のヒント
サブシェルでトラップがリセットされていると言っているように見え、Commandの置換はサブシェルで実行され、trap
の内部に$()
が実行されます(Bash 3.2と4.2でテスト済み)。POSIXでは、traps=$(trap)
が機能する必要があることも述べられています。
pgas
の#bash
のおかげで。
所属していません StackOverflow