我正在寻找的初始设置$-多变的。从哪个文件以及在什么时候初始化?
答案1
从哪个文件以及在什么时候初始化?
这取决于 shell 的调用方式,set
配置文件中可能存在命令调用,例如/etc/bash.bashrc
或/etc/profile
甚至~/.bashrc
.所以没有一个文件用于初始化它。
引用 bash 手册:
-
扩展为调用时指定的当前选项标志、通过 set 内置命令或由 shell 本身设置的选项标志(例如 -i 选项)。
换句话说,某些选项取决于如何调用 shell(登录 shell 或交互式 shell),某些选项由 shell 本身设置(即,它们是默认选项),然后是手动设置的选项。内置set
部分很简单 - 例如,由您控制
$ echo $-
himBHs
$ set -b
$ echo $-
bhimBHs
或者它可以用在 shell 将读取的配置文件中。
您可能想参考登录 Shell 和非登录 Shell 之间的区别?和区分交互式登录和非交互式非登录 shell。这两篇文章涵盖了 shell 调用方式之间的巨大差异,但 terdon 的后续文章展示了为登录和非登录 shell 设置选项的一个很好的示例。同时,您可能想知道 shell 如何知道调用它的方式来设置适当的选项?嗯,有一个帖子是这样的:bash 如何知道它是如何被调用的?:
通常 bash 知道它是一个登录 shell,因为当登录程序调用它时,它告诉 bash 它的名称是 -bash。该名称位于第 0 个命令行参数 argv[0] 中
如前所述,某些选项是默认的。例如,
-m
监控模式。作业控制已启用。 对于交互式 shell,此选项默认启用在支持它的系统上-h
记住命令的位置,因为它们被查找以执行。 默认情况下启用此功能。
正如前面提到的,shell 可以查看它是如何被调用的,以及是否启用-m
。