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
とにかく十分です。
答え2
オプション? :Bashには3つのオプションセットがあります。
オプションはコマンドで読み取りまたは設定されます
set
。
(マニュアルでこのコマンドを使用してください。LESS=+/'set \[--abefhkmnptuvxBCEHPT\]' man bash
)
すべての単一文字オプション: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
すべてのオプションを取得するには。できるだけ多くの長いオプションと-sDc
INVOCATIONの一部()を印刷することはできません。
$ echo $-; shopt -p ; shopt -po
変数に保存するには:
$ storeoptions="$(echo "set -$-"; shopt -p ; shopt -po)"
この変数は、すべてのオプションを設定するために使用できます。
$ eval "$storeoptions"
答え3
~からこのman
ページ:
shopt
...オプションがない場合、または-pオプションを使用すると、設定可能なすべてのオプションのリストが表示され、各オプションが設定されているかどうかを示します。
shopt | grep "on$"
有効になっているすべてのオプションのリストが印刷されます。
答え4
特定のオプションを確認するには:
if shopt -q <OPTION>
then echo '<OPTION> is set'
fi