31

假设我set -x在脚本“a.sh”中执行,它调用另一个脚本“b.sh”。

是否可以让“b.sh”继承“a.sh”的-x选项?

4

4 回答 4

36
export SHELLOPTS

例如:

echo date > b
chmod +x b

./a没有导出,我们只能在它调用时看到命令./b

$ echo ./b > a
$ bash -xv a

./a
+ ./b
Sun Dec 29 21:34:14 EST 2013

但是如果我们导出 SHELLOPTS,我们会看到./a./b

$ echo "export SHELLOPTS; ./b" > a
$ bash -xv a

./a
+ ./b  date
++ date   
Sun Dec 29 21:34:36 EST 2013
于 2013-12-30T02:44:12.183 回答
4

由于-x不被子shell继承,因此您需要更加明确。您可以测试何时-x$-特殊参数一起使用。

if [[ $- = *x* ]]; then
    # Set the option, then *source* the script, in a subshell
    ( set -x; . b.sh )
else
    # Simply run the script; subshell automatically created.
    ./b.sh
fi
于 2013-07-25T12:26:45.933 回答
0

如果脚本 b来源于脚本 a,它们将被合并到脚本 b 中。这可能会或可能不会为您解决问题!

于 2013-07-25T08:32:52.713 回答
0

就像@devnull 说你可以.在你的脚本中使用操作。

在 a.sh

. SETVALUES

在 b.sh

. SETVALUES

在 SETVALUES

set -x

无论您在何处调用 SETVALUES,这些值都将在该子 shell 中设置。

于 2013-07-25T09:08:39.487 回答