我看到 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 时进行设置。