为了避免出现 XY 问题场景,我将解释为什么我要问这个问题。
我记得我已经shopt -s extglob
在我的~/.bashrc
文件中进行了设置,因为诸如此类的事情@(pattern-list)
确实有效。
但是,我刚刚查看过~/.bashrc
,该选项尚未设置。
所以我决定看看它来自哪里,结果发现
- 如果我通过启动另一个 shell
bash --norc
然后运行shopt
我会看到这一行extglob off
, - 然而,如果我通过 启动它
bash --rcfile /dev/null
,那么shopt
表明extglob on
,
这并不能真正帮助我找出extglob
设置了哪个文件。
根据评论,PS4=' $BASH_SOURCE:$LINENO: ' bash -lixc true |& grep extglob
给出
/usr/share/bash-completion/bash_completion:45: shopt -s extglob progcomp
/usr/share/bash-completion/bash_completion:45: shopt -s extglob progcomp
答案1
在 Debian/Ubuntu 上,还有/etc/bash.bashrc
,Bash 的读法与 类似~/.bashrc
。使用它是一个编译时选项,我知道红帽通过/etc/
从每个用户的.bashrc
.
这Debian 文档似乎确实意味着--rcfile
应该覆盖两者,并--norc
禁止阅读两者:
--norc
如果 shell 是交互式的,则不要读取和执行系统范围的初始化文件/etc/bash.bashrc
和个人初始化文件。~/.bashrc
--rcfile file
从文件而不是系统范围的初始化文件/etc/bash.bashrc
和标准个人初始化文件 执行命令~/.bashrc
但就像 @muru 在评论中所说,这似乎是错误的,--rcfile /dev/null
仍然是/etc/bash.bashrc
。所以,在那里寻找shopt
.