現在のシェルの Bash オプションをどのようにリストしますか?

現在のシェルの Bash オプションをどのようにリストしますか?

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 "$@"

-fin値を保存するときは、まずシェルファイル名拡張を無効にしてください。その後、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つにまとめることができますevalaliasパラメータなしで同じものを呼び出すこともできます。しかし、これは…隠すことができます。私の考えでは、そうする前に"$@"配列に入れなければならないと思います。bashset

いいえ、まだありますtrap。これはちょっと面白いですね。通常:

trap 'echo this is my trap' 0
(echo this is my subshell; trap)

...印刷のみ可能これは私のサブシェルですサブシェルは新しいプロセスであり、独自のセットを持つため、どのtrapsも継承されませんが、trap親プロセスが明示的に無視するsは継承されます。(良いtrap '' INT

しかし:

trap 'echo this is my trap' 0
save_traps=$(trap)

trap初めての場合は特別になります。ただこのコマンドは、親シェルの現在の設定リストを引用形式で再現してtrapsシェルに安全に戻すために、コマンド代替サブシェルで実行されます。だからあなたはこれを行うことができますsave_trapsそれから set引数がなければ - そしてすでに言及されている残りのすべて - ほとんどすべてのシェル状態がロックされます。ただし、元のシェルvar属性を明示的に追加してexport -p復元することもできます。readonly -p

とにかく十分です。

おすすめ記事