是否有任何方法可以运行bash脚本X,以便如果X调用可执行bash脚本Y,则Y以“sh-eux”开头?
上海:

./Y.sh

上海:
#!/bin/sh
echo OK

最佳答案

通过导出SHELLOPTS环境变量,可以使用父级中设置的相同shell选项运行子shell。
在无法编辑X.shY.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公司。

09-26 05:23