有没有一种方法可以将Bash Shell选项导出到子Shell?

5

我在当前shell中设置了bash选项(例如shopt -e autocd),并希望将此选项导出/复制到新创建的子shell中。有没有办法做到这一点?

Bash版本为:GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)

示例:

$shopt -s autocd
$shopt autocd
autocd          on
$bash
$shopt autocd
autocd          off

2
应该移动到unix.stackexchange。 - Tom Zych
1
为什么?你能解释一下吗?在发布这个问题之前,我检查了bash的标签:与Unix相关的问题比在stackoverflow中与bash相关的问题要多得多,因此决定根据这些统计数据在stackoverflow上发布。 - Michael Brux
1个回答

5

您可以通过使用相应的shell变量BASHOPTS导出许多与shell变量类似的shell选项,该变量存储了这些shell选项:

export BASHOPTS

以下是 Bash 手册的一些信息:

BASHOPTS: 启用的 shell 选项列表,由冒号分隔。列表中的每个单词都是 shopt 内置命令的 -s 选项的有效参数(请参阅下面的 SHELL BUILTIN COMMANDS)。在 shopt 报告为开启的选项将出现在 BASHOPTS 中。如果该变量在 bash 启动时处于环境中,则在读取任何启动文件之前,列表中的每个 shell 选项都将被启用。此变量只读。

还有一个密切相关的变量 SHELLOPTS,但这只在直接调用 bash(例如通过 bash)而不是通过 sh 时才能正常工作,因为 sh 启用了 Bash 的 POSIX 模式。这里提供了更多关于此问题的信息。


你的意思是 export BASHOPTS 吗?OP 使用的是 shopt - flow2k
1
@flow2k:是的,看起来你是对的,谢谢提示。 :-) 我已经更新了我的答案。 - Jadzia
BASHOPTS运行良好。不明白为什么与SHELLOPTS有关?据我所知,BASHOPTS用于shopt,而SHELLOPTS用于set - Michael Brux
@MichaelBrux:如果你的意思是SHELLOPTS和BASHOPTS是不同的,那么你是正确的。但是它们可以被视为相互关联,因为它们都存储shell选项,只是不同的选项而已。并且它们可以通过相同的导出机制“复制到子shell”(使用OP的话来说)。此外,许多人甚至不知道存在两种类型的shell选项,因此提到相关的SHELLOPTS似乎是有好处的。 - Jadzia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接