$- 选项何时何地设置?

$- 选项何时何地设置?

我正在寻找的初始设置$-多变的。从哪个文件以及在什么时候初始化?

答案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

相关内容