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

Enl*_*ico 7 bash arch-linux shopt

为了避免 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
Run Code Online (Sandbox Code Playgroud)

ilk*_*chu 9

在 Debian/Ubuntu 上,还有/etc/bash.bashrc,Bash 的读法与~/.bashrc. 使用它是一个编译时选项,我知道 Red Hat 通过/etc/从 per-user 中获取类似的文件来做类似的事情.bashrc

Debian的文件似乎在暗示--rcfile应该同时重写,以及--norc抑制读取两个:

--norc如果 shell 是交互式的,则不要读取和执行系统范围的初始化文件/etc/bash.bashrc和个人初始化文件~/.bashrc

--rcfile file 从文件而不是系统范围的初始化文件/etc/bash.bashrc和标准的个人初始化文件中 执行命令~/.bashrc

但是就像@muru 在评论中所说的那样,这似乎是错误的,--rcfile /dev/null仍然是/etc/bash.bashrc. 所以,在那里寻找shopt.