gpt4 book ai didi

bash 递归 xtrace

转载 作者:行者123 更新时间:2023-11-29 08:48:22 26 4
gpt4 key购买 nike

有什么方法可以运行 bash 脚本 X,以便如果 X 调用可执行的 bash 脚本 Y,那么 Y 以“sh -eux”开头?

X.sh:

./Y.sh

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)-release 上测试。 YMMV。

关于bash 递归 xtrace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com