web-dev-qa-db-ja.com

現在のシェルのbashのオプションを一覧表示するにはどうすればよいですか?

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

現在のシェルに適用されているこれらの設定のリストを印刷することは可能ですか?

29
the_velour_fog
printf %s\\n "$-"

1文字のオプションを1つの文字列にリストします。

このパラメーターは次のようにも使用できます。

set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"

最初にシェル-filename展開を無効にすると同時に、$-の値を保存します(ある場合)-$1に。次に、グロブは発生せず、最後の+filename展開が再び有効になり、おそらく無効にもなります。

たとえば、-fの値が最初に保存されたときに$-ilename拡張がすでに無効になっている場合、その保存値は(少なくとも)になります。

f

そして、setが再度実行されると、次のようになります。

set +f -f

それはあなたがあなたが始めた場所にあなたを戻すだけです。

set +o

すべてのsettableシェルオプション(参照 ジェイソンの回答shoptableの場合-それは単語ですか?-オプション)をシェルの再入力に対して安全な形式でリストします。このようにして、次のことも実行できます。

state=$(set +o)
set -some -crazy -options
eval "$state"

シェルオプションの状態をそれぞれ保存、変更、復元します。

shoptionsオプションとsettableオプションを一度に処理するには:

state=$(set +o;shopt)
#do what you want with options here
eval "$state"

setwithout引数を呼び出して、シェルに現在設定されているすべての変数のリストを追加することもできます-シェルへの再入力のために引用されます。また、bashでコマンドtypeset -fpを追加して、現在宣言されているすべてのシェル関数を含めることもできます。全部まとめて、準備ができたらevalをまとめることができます。引数なしでaliasを呼び出すこともできます。それは...それをカバーするかもしれません。 "$@"があると思います-bashを実行する前に、まずset配列に配置する必要があります。

いいえ、trapもあります。これは少しおかしいです。通常:

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

...単に表示するこれは私のサブシェルですサブシェルは新しいプロセスであり、独自のtrapsのセットを取得するため、trapsを継承せず、親が明示的に無視したもの-- (like trap '' INT

しかしながら:

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

trapは、それが親であるシェルに現在設定されているtrapsのリストをシェルへの安全な再入力のために引用された形式で再現するという点で、コマンド置換サブシェルで最初に実行されるonlyコマンドである場合に特別に動作します。そして、save_trapsthensetを引数なしで実行し、残りのすべてをすでに説明したように、すべてのシェル状態をほぼロックできます。ただし、export -pおよびreadonly -pを明示的に追加して、元のシェル変数属性を復元することもできます。

とにかく、それで十分です。

27
mikeserv

manページから:

買い物
...オプションを指定しないか、-pオプションを指定すると、設定可能なすべてのオプションのリストが表示され、それぞれが設定されているかどうかが示されます。
shopt | grep on

すべての有効なオプションのリストを出力します。

9
jasonwryan

オプション?:bashには3つのオプショングループがあります。

  1. コマンド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
    
  2. コマンドshoptによって読み取られるか設定されるオプション。
    (このコマンドでマニュアルを読みます:LESS=+/'shopt \[-pqsu\]' man bash'
    リストはかなり長くなりますが、印刷するのは簡単です。次を使用してください:

    $ shopt -p
    

    または同様(ただし等しくない):

    $ shopt
    
  3. 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"
7
user184899

すべてのオプションを一覧表示するには:

set -o

特定のオプションを検査するには:

set -o | grep <OPTION>

オプションverboseを例にとります:

$ set -o | grep verbose
verbose         off
6
Jeremy Kao

特定のオプションを検査するには:

if shopt -q <OPTION>
then echo '<OPTION> is set'
fi
1
Bruce