Bashインタプリタ自体にはオプションがあります。
Bashのmanページの22〜23行目:
OPTIONS All of the single-character Shell options documented in the description of the set builtin command can be used as options when the Shell is invoked. In addition, bash interprets the following options when it is invoked: -c ... -i ... -l ... -r ...
次のようなbashのmanページでいくつかの検索パターンを使用しました。
/^\s*set
/list
現在のシェルに適用されているこれらの設定のリストを印刷することは可能ですか?
printf %s\\n "$-"
1文字のオプションを1つの文字列にリストします。
このパラメーターは次のようにも使用できます。
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
最初にシェル-f
ilename展開を無効にすると同時に、$-
の値を保存します(ある場合)-$1
に。次に、グロブは発生せず、最後の+f
ilename展開が再び有効になり、おそらく無効にもなります。
たとえば、-f
の値が最初に保存されたときに$-
ilename拡張がすでに無効になっている場合、その保存値は(少なくとも)になります。
f
そして、set
が再度実行されると、次のようになります。
set +f -f
それはあなたがあなたが始めた場所にあなたを戻すだけです。
set +o
すべてのset
tableシェルオプション(参照 ジェイソンの回答shopt
ableの場合-それは単語ですか?-オプション)をシェルの再入力に対して安全な形式でリストします。このようにして、次のことも実行できます。
state=$(set +o)
set -some -crazy -options
eval "$state"
シェルオプションの状態をそれぞれ保存、変更、復元します。
shopt
ionsオプションとset
tableオプションを一度に処理するには:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
set
without引数を呼び出して、シェルに現在設定されているすべての変数のリストを追加することもできます-シェルへの再入力のために引用されます。また、bashでコマンドtypeset -fp
を追加して、現在宣言されているすべてのシェル関数を含めることもできます。全部まとめて、準備ができたらeval
をまとめることができます。引数なしでalias
を呼び出すこともできます。それは...それをカバーするかもしれません。 "$@"
があると思います-bash
を実行する前に、まずset
配列に配置する必要があります。
いいえ、trap
もあります。これは少しおかしいです。通常:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
...単に表示するこれは私のサブシェルですサブシェルは新しいプロセスであり、独自のtrap
sのセットを取得するため、trap
sを継承せず、親が明示的に無視したもの-- (like trap '' INT
)。
しかしながら:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
は、それが親であるシェルに現在設定されているtraps
のリストをシェルへの安全な再入力のために引用された形式で再現するという点で、コマンド置換サブシェルで最初に実行されるonlyコマンドである場合に特別に動作します。そして、save_traps
、thenset
を引数なしで実行し、残りのすべてをすでに説明したように、すべてのシェル状態をほぼロックできます。ただし、export -p
およびreadonly -p
を明示的に追加して、元のシェル変数属性を復元することもできます。
とにかく、それで十分です。
man
ページから:
買い物
...オプションを指定しないか、-pオプションを指定すると、設定可能なすべてのオプションのリストが表示され、それぞれが設定されているかどうかが示されます。
shopt | grep on
すべての有効なオプションのリストを出力します。
オプション?:bashには3つのオプショングループがあります。
コマンドset
によって読み取られるか設定されるオプション。
(このコマンドはマニュアルに使用します:LESS=+/'set \[--abefhkmnptuvxBCEHPT\]' man bash
)
1文字のすべてのオプション:abefhkmnptuvxBCEHPT
また、オプション(対応する単一文字がない):
set -o emacs
set -o history
set -o ignoreeof
set -o interactive-comments
set -o pipefail
set -o posix
set -o vi
コマンドshopt
によって読み取られるか設定されるオプション。
(このコマンドでマニュアルを読みます:LESS=+/'shopt \[-pqsu\]' man bash'
)
リストはかなり長くなりますが、印刷するのは簡単です。次を使用してください:
$ shopt -p
または同様(ただし等しくない):
$ shopt
INVOCATIONで設定できるオプション:
(マニュアルのコマンド:LESS=+/'^INVOCATION' man bash
)
すべてのset
オプション:
bash -abefhkmnptuvxBCEHPT
すべてのshopt
オプション
bash -O option
Bashを呼び出すときにのみ意味があるいくつかのオプション:
bash -lirsDc
また、(長いオプション):
bash --debugger --help --init-file file --rcfile file --login \
--noediting --noprofile --norc --posix --restricted \
--verbose --version
すべてのset
1文字オプションと-ri
は$-
で印刷されます。
-i Interactive
Only read with `$-` (if it contains an `i`).
-r Restricted
Also read with `shopt -p restricted_Shell
例えば:
$ echo 'echo $0 $-' | bash -abefhikmprtuvxBCEHPT -lri
ログインシェルとしてbashを呼び出すと、shoptでのみ報告されます。
-l Login
read with `shopt -p login_Shell`
したがって:
$ echo 'shopt -p login_Shell' | bash -abefhikmprtuvxBCEHPT -lri
shopt -s login_Shell
オプション-n
は、どのコードでもテストできません。つまり、コードを実行しないでください。
実行中シェルのオプションを一覧表示するための最良のツール。set
で設定されたものとshopt
で設定されたものは同じshopt
です。 。設定されたオプションを一覧表示するには:
shopt -o
これはset -o
とまったく同じように機能します。 shopt -po
を使用すると、set +o
と同じ結果が得られます。
ショップオプションを一覧表示するには:
shopt -p
そのうち、設定されたものshopt -ps
または未設定のshopt -pu
のどちらを印刷するかを選択できます。
すべてのオプションを取得します。可能な限り多くの長いオプションとINVOCATIONの一部(-sDc
)は印刷できません。
$ echo $-; shopt -p ; shopt -po
それらを変数に格納するには:
$ storeoptions="$(echo "set -$-"; shopt -p ; shopt -po)"
また、変数を使用してすべてのオプションを元に戻すことができます。
$ eval "$storeoptions"
すべてのオプションを一覧表示するには:
set -o
特定のオプションを検査するには:
set -o | grep <OPTION>
オプションverbose
を例にとります:
$ set -o | grep verbose
verbose off
特定のオプションを検査するには:
if shopt -q <OPTION>
then echo '<OPTION> is set'
fi