在我的交互式 shell 中,bash 的“shopt extglob”在哪里打开?

在我的交互式 shell 中,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在新的交互式 shell 中检查typescript脚本的文件输出:

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

...

++ shopt -s extglob progcomp

' +s 表示源文件的级别,因此当我们从命令向上查找一级时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 时进行设置。

相关内容