現在のbashセッションでextglobが有効になっているかどうかを知る方法は?


9

bashターミナルを開いています。値を変更する前に、このセッションでオプションextglobが有効か無効かを確認したいと思います。これどうやってするの?


2
興味がない限り、確認する必要はありません。オンにしたい場合は実行するshopt -s extglobか、オフにしたい場合はを実行しshopt -u extglobます。元々あったかどうかは関係ありません。
terdon

回答:


15

ただ走れ:

$ shopt extglob

現在のステータスを返します:

$ shopt extglob 
extglob         on
$ shopt -u extglob 
$ shopt extglob 
extglob         off

すべてのオプションを表示するには、次のコマンドを実行します。

$ shopt

これはスクリプトにも使用できます。戻りステータスもオプションの設定または設定解除を示しますが、メッセージは標準出力を混乱させます。
cuonglm

11

shopt -qを使用します。

shopt -q extglob && echo enable || echo disable

-qoptionはshopt出力を破棄し、オプションが設定または設定解除されたことを示すステータスを返します。

変数にshopt表示できるオプションのみを報告することに注意してくださいBASHOPTS。これらのオプションはset組み込みコマンドでは無効です。

有効なオプションをチェックするためにset、またはで表示されることができSHELLOPTS、使用shopt -qo

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable

2
なぜshopt extglobですか?
terdon

1
出力が私の標準出力を台無しにしたくないので:)
cuonglm

どういう意味ですか?私の知る限り、OPはオプションが設定されているかどうかを確認したいと考えています。これはターミナルにあると彼らは言っているので、私はそれがスクリプトの一部であるとは思いません。とにかく、違いは何ですか?両方shopt extglobとあなたのアプローチはstdoutに書き込みます。考えてるshopt -q extglob && shopt -u extglob || shopt -s extglob
terdon

@terdon:まあ、私のアプローチでは、必要に応じてstdoutにのみ書き込みます。一般的なアプローチはshopt -q extglob && : Code when enable || : Code when disableです。
cuonglm

3
ユーザーの既存の設定を保持しようとするスクリプトを書くことは想像できますが、特定の方法を設定しないと壊れるコードの重要なビットがあるかもしれません。これは、潜在的に異なる状態を必要とする重要な操作を実行した後、現在の状態を静かに判断し、保存して、できるだけ早く復元する方法を提案します。
モンティハーダー

5

bashには2つのオプションリストがあります。1 shoptつと1つset

オプションextglobshoptリストに属しています。
その値は、shopt extglobまたはを使用して出力できますshopt -p extglob

のようなオプションnounsetsetリストに属しています。
その値は、shopt -op nounsetまたはを使用して出力できshopt -o nounsetます。

1つのオプションをチェックします。

shoptの特定のオプションを(変更せずに)印刷するには、次を使用しますshopt -p name

$ shopt -p xpg_echo
shopt -u xpg_echo

そしてのためset、使用しますshopt -po name(そう、あなたが使用することshopt -opのためにsetリスト)。

$  shopt -po xtrace
set +o xtrace

オプションを一覧表示します。

shoptからすべてのオプションをリストするには、shopt(またはreusable shopt -p)を使用します。
また、shopt -sまたはshopt -u使用することができます。

にすべてのオプションをリストする方法setset -o(関連:)ですset +o
または:shopt -oと同等ですset -oshopt -opしていますset +o

マニュアル

からLESS=+/'^ *shopt \[' man bash

オプションを指定しない場合、または-pオプションを指定した場合は、設定可能なすべてのオプションのリストが表示されます。-sまたは-uをoptname引数なしで使用すると、表示はそれぞれ設定または設定解除されたオプションに制限されます。

からLESS=+/'^ *set \[' man bash

オプション名なしで-oを指定すると、現在のオプションの値が出力されます。オプション名なしで+ oを指定すると、現在のオプション設定を再作成する一連のsetコマンドが標準出力に表示されます。

$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

そして

$  shopt -sp
shopt -s checkwinsize
shopt -s cmdhist
shopt -s expand_aliases
shopt -s extglob
shopt -s extquote
shopt -s force_fignore
shopt -s histappend
shopt -s histverify
shopt -s interactive_comments
shopt -s progcomp
shopt -s promptvars
shopt -s sourcepath

shopt -op実際にどれがsetオプションをリストするかについて言及する価値があります:

$ shopt -op
set +o allexport
set -o braceexpand
set -o emacs
set +o errexit
set +o errtrace
set +o functrace
set -o hashall
set -o histexpand
set -o history
set +o ignoreeof
set -o interactive-comments
set +o keyword
set -o monitor
set +o noclobber
set +o noexec
set +o noglob
set +o nolog
set +o notify
set +o nounset
set +o onecmd
set +o physical
set +o pipefail
set +o posix
set +o privileged
set +o verbose
set +o vi
set +o xtrace
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.