Bashインタプリタ自体にはオプションがあります。
たとえば、行22-23に記載されている内容は次のとおりです。バッシュのマニュアルページ:
オプション
セット組み込みコマンドの説明に文書化されているすべての単一文字シェルオプションは、シェルを呼び出すときにオプションとして使用できます。また、bashは呼び出し時に次のオプションを解釈します。
-c ...
-i ...
-l ...
-r ...
私はBashのマニュアルページでいくつかの検索パターンを使用します。たとえば、次のようになります。
/^\s*set
/list
現在のシェルに適用されているこれらの設定のリストを印刷できますか?
ベストアンサー1
printf %s\\n "$-"
単一文字オプションは単一文字列としてリストされます。
このパラメーターは、次のように使用することもできます。
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
-f
in値を保存するときは、まずシェルファイル名拡張を無効にしてください。その後、globは発生せず、最後のファイル名拡張子を再度有効または無効にすることができます。$-
$1
+f
たとえば、-f
ファイル名拡張子を無効にした状態で値を最初に保存した場合、保存された$-
値は次のようになります。(少なくとも):
f
だからset
もう一度実行すると、結果は次のようになります。
set +f -f
これはあなたが始めた場所に戻るだけです。
set +o
set
すべてのテーブルシェルオプションを一覧表示します。(望むよりジェイソンの答えできる人のためにshopt
- それは言いますか? - オプション)シェルの再進入に安全な形になっています。このようにして、次の操作も実行できます。
state=$(set +o)
set -some -crazy -options
eval "$state"
シェルオプションの状態をそれぞれ保存、変更、および復元します。
shopt
イオンとテーブルのオプションを一度に処理するには:set
state=$(set +o; shopt -p)
#do what you want with options here
eval "$state"
また、電話することができますset
いいえ現在のシェルによって設定されているすべての変数のリストを追加するために使用される引数は、シェルに戻すために引用することもできます。 bashにこのコマンドを追加して、typeset -fp
現在宣言されているすべてのシェル関数を含めることもできます。準備ができたら、すべてを1つにまとめることができますeval
。alias
パラメータなしで同じものを呼び出すこともできます。しかし、これは…隠すことができます。私の考えでは、そうする前に"$@"
配列に入れなければならないと思います。bash
set
いいえ、まだありますtrap
。これはちょっと面白いですね。通常:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
...印刷のみ可能これは私のサブシェルですサブシェルは新しいプロセスであり、独自のセットを持つため、どのtrap
sも継承されませんが、trap
親プロセスが明示的に無視するsは継承されます。(良いtrap '' INT
)。
しかし:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
初めての場合は特別になります。ただこのコマンドは、親シェルの現在の設定リストを引用形式で再現してtraps
シェルに安全に戻すために、コマンド代替サブシェルで実行されます。だからあなたはこれを行うことができますsave_traps
、それから set
引数がなければ - そしてすでに言及されている残りのすべて - ほとんどすべてのシェル状態がロックされます。ただし、元のシェルvar属性を明示的に追加してexport -p
復元することもできます。readonly -p
とにかく十分です。