调用 bash 时,选项“--rcfile /dev/null”是否与“--norc”具有相同的效果?

调用 bash 时,选项“--rcfile /dev/null”是否与“--norc”具有相同的效果?

为了避免出现 XY 问题场景,我将解释为什么我要问这个问题。

我记得我已经shopt -s extglob在我的~/.bashrc文件中进行了设置,因为诸如此类的事情@(pattern-list)确实有效。

但是,我刚刚查看过~/.bashrc,该选项尚未设置。

所以我决定看看它来自哪里,结果发现

  • 如果我通过启动另一个 shellbash --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.

相关内容