我看到 extglob 已打開,但我想知道它是在哪裡設定的。
$ shopt extglob
extglob on
$
在這些文件中沒有找到它。
~/.bashrc
~/.bash_profile
~/.profile
/etc/bashrc
(沒有這樣的文件)/etc/bash.bashrc
答案1
在我的 14.04 虛擬機器上,我在以下位置找到了它/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
在新的互動式 shell 中檢查typescript
腳本的檔案輸出:
+ . /usr/share/bash-completion/bash_completion
...
++ shopt -s extglob progcomp
表示+
原始檔案的級別,因此當我們從命令向上查找一級時shopt
,我們會看到/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
,因此將在聲明互動式非登入 shell 時進行設定。