2012-11-21 14 views
6

私は、bashスクリプトと他のツールで構築されたいくつかのシステムを扱っています。 -e、-u、-o pipefailオプションを使用してエラー状態を捕捉し、予期しない動作を防止することをお勧めします。どのように現在のオプションをbashに問い合わせることができますか?

しかし、私がソースを変更できるサードパーティのライブラリの中には、これをしないものがあり、変数テストを-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)> 

とこれらのオリジナルを復元します。

答えて

7

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

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

(
    set +e +u +o pipefail 
    if [ -n "$_UNSET_VAR" ]; then 
     cp <some stuff> <some other stuff> 
    fi 
) 
+0

優れています。それはうまくいく - https://github.com/dannystaple/virtualenv/commit/a220ed9cca154cff5a04caf957f619dd61d1e15b。 –

関連する問題