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 的实例会沿着线开始,除非其中一个实例取消设置或取消导出它。