bash 的「shopt extglob」在哪裡為我的互動式 shell 開啟?

bash 的「shopt extglob」在哪裡為我的互動式 shell 開啟?

我看到 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 時進行設定。

相關內容