我可以将“set +h”继承到子进程吗?

我可以将“set +h”继承到子进程吗?

set +h我似乎无法继承被调用的 shell 脚本的效果:

这是一个 shell 脚本 ( ./call)。

#!/bin/bash

set +h
export SHELLOPTS

./called

这是以下内容./called

#!/bin/bash

echo \$-=$-
echo SHELLOPTS=$SHELLOPTS

当我执行时./call,会打印以下内容:

$-=hB
SHELLOPTS=braceexpand:hashall:interactive-comments

我认为当我导出时 shell 选项会被继承SHELLOPTS。事实显然并非如此。

set +h有没有办法继承被调用的shell脚本的效果?

答案1

bash 手册:

SHELLOPTS 中出现的选项是由“set -o”报告为“on”的选项。如果 Bash 启动时环境中存在此变量,则在读取任何启动文件之前将启用列表中的每个 shell 选项。

由此可见选项关掉不会出现在 中SHELLOPTS,因此对新 shell 是否启用或禁用它们没有影响。

您可以尝试以下任一方法:

  • bash +h ./called使用, 或运行脚本
  • 放入set +h一个文件,设置BASH_ENV为该文件的路径export,认为这会影响全部bash 的实例会沿着线开始,除非其中一个实例取消设置或取消导出它。

相关内容