対話型シェルで bash の「shopt extglob」がオンになっているのはどこですか?

対話型シェルで bash の「shopt extglob」がオンになっているのはどこですか?

extglob がオンになっているのはわかりますが、これがどこに設定されているかを知りたいです。

$ shopt extglob
extglob         on
$

これらのファイルでは見つかりませんでした。

  • ~/.bashrc
  • ~/.bash_profile
  • ~/.profile
  • /etc/bashrc(そのようなファイルはありません)
  • /etc/bash.bashrc

答え1

私の 14.04 VM では、次の場所にあります/usr/share/bash-completion/bash_completion:

ubuntu@ubuntu:~$ grep extglob /usr/share/bash-completion/bash_completion 
shopt -s extglob progcomp
ubuntu@ubuntu:~$ 

出典~/.bashrc:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

これは、 を実行することでわかりますbash -x。 は、ソースされたすべての起動ファイルとそのコマンドを表示します。 を実行しscript -c "bash -x"、次にexit新しい対話型シェルで、typescriptスクリプトからのファイル出力を調べます。

+ . /usr/share/bash-completion/bash_completion

...

++ shopt -s extglob progcomp

+ソースファイルのレベルを示します。そのため、shoptコマンドから 1 レベル上を見ると、/usr/share/bash-completion/bash_completionがソースされていることがわかります。

答え2

/usr/share/bash-completion/bash_completionファイルの下に設定されます:

shopt -s extglob progcomp

オプションが設定されていない場合、ファイル~/.bashrcには次の内容が含まれます。posix

if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion

つまり、ファイルが/usr/share/bash-completion/bash_completion存在する場合は、そのファイルがソースになります。

そのファイルには設定する行が含まれているためextglob、対話型の非ログイン シェルの起動時に設定されます。

関連情報