6

私は、bash スクリプトやその他のツールで構築された多数のシステムを使用しています。かなりの頻度で、-e、-u、および -o pipefail オプションを使用して、エラー状態をキャッチし、予期しない動作を防ぐことをお勧めします。

ただし、一部のサード パーティ ライブラリ (ソースを変更することができます) はこれを行わず、変数テストを -u で存在するように変更することに満足していません。

それらのスクリプトは、実行されずに供給される可能性があります。だから私がやりたいのは、これらのいくつかで、より寛容なオプションのセットを設定してから、より厳しいものを復元することです. 問題のスクリプトは多くのユーザーによって使用されており、同じ問題に遭遇したユーザーもいるため、この変更をサードパーティのスクリプトに入れたいと思います。

<preserve original options>
set +e +u +o pipefail
#do stuff like
if [ -n "$_UNSET_VAR" ] ; then
  cp <some stuff> <some other stuff>
fi
<restore original options (whatever they were)>

これらのオリジナルを保存および復元する方法を探しています。

4

1 に答える 1

7

特別なパラメータ$-には、現在設定されているオプションのリストが含まれています。それを解析して、-e-uが設定されているかどうかを確認できます。についてpipefailは、 の出力を解析する必要がありますshopt

サブシェルでコードを実行できる場合 (グローバル変数などを設定しようとしない場合)、それを行う方が簡単で、元の状態をリセットすることを心配する必要はありません。

(
    set +e +u +o pipefail
    if [ -n "$_UNSET_VAR" ]; then
       cp <some stuff> <some other stuff>
    fi
)
于 2012-11-21T14:18:32.087 に答える