質問

引数なし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のおかげで。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top