RETURNトラップを使用する
RETURNトラップで指定されたコマンドは、シェル関数が...を返した後、実行が再開される前に実行されます。
[-p
買い物をする]オプションを使用すると、出力が入力として再利用できる形式で表示されます。
– https://www.gnu.org/software/bash/manual/bash.html
foobar() {
trap "$(shopt -p extglob)" RETURN
shopt -s extglob
# ... your stuff here ...
}
テスト用
foobar() {
trap "$(shopt -p extglob)" RETURN
shopt -s extglob
echo "inside foobar"
shopt extglob # Display current setting for errexit option
}
main() {
echo "inside main"
shopt extglob # Display current setting for errexit option
foobar
echo "back inside main"
shopt extglob # Display current setting for errexit option
}
テスト
$ main
inside main
extglob off
inside foobar
extglob on
back inside main
extglob off
バリエーション:すべてのショップオプションをリセットするには、トラップステートメントを次のように変更します。
trap "$(shopt -p)" RETURN
バリエーション:設定されているすべてのオプションをリセットするには、トラップステートメントを次のように変更します。
trap "$(set +o)" RETURN
注:Bash 4.4以降、より良い方法があります:$-localを作成します。
バリエーション:すべてのセットとすべてのショップオプションをリセットするには、トラップステートメントを次のように変更します。
trap "$(set +o); $(shopt -p)" RETURN
注: set +o
と同等ですshopt -p -o
:
+ o 現在のオプション設定を、同じオプション設定を実現するコマンドとしてシェルに再入力するのに適した形式で標準出力に書き込みます。
–オープングループベース仕様第7号、2018年版>セット