是否有任何方法可以运行bash脚本X,以便如果X调用可执行bash脚本Y,则Y以“sh-eux”开头?
上海:
./Y.sh
上海:
#!/bin/sh
echo OK
最佳答案
通过导出SHELLOPTS
环境变量,可以使用父级中设置的相同shell选项运行子shell。
在无法编辑X.sh
和Y.sh
的情况下,我将创建一个包装器脚本,在调用SHELLOPTS
之前简单地导出X.sh
。
例子:
#!/bin/sh
# example X.sh which calls Y.sh
./Y.sh
.
#!/bin/sh
# example Y.sh which needs to be called using sh -eux
echo $SHELLOPTS
.
#!/bin/sh -eux
# wrapper.sh which sets the options for all sub shells
export SHELLOPTS
./X.sh
直接调用
X.sh
显示-eux
中未设置Y.sh
选项[lsc@aphek]$ ./X.sh
braceexpand:hashall:interactive-comments:posix
通过
wrapper.sh
调用它表明选项已经传播到子shell。[lsc@aphek]$ ./wrapper.sh
+ export SHELLOPTS
+ ./x.sh
+ ./y.sh
+ echo braceexpand:errexit:hashall:interactive-comments:nounset:posix:xtrace
braceexpand:errexit:hashall:interactive-comments:nounset:posix:xtrace
在GNU bash上测试,版本3.00.15(1)-发行版。YMMV公司。