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
、対話型の非ログイン シェルの起動時に設定されます。