假设我set -x
在脚本“a.sh”中执行,它调用另一个脚本“b.sh”。
是否可以让“b.sh”继承“a.sh”的-x
选项?
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
由于-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
如果脚本 b来源于脚本 a,它们将被合并到脚本 b 中。这可能会或可能不会为您解决问题!
就像@devnull 说你可以.
在你的脚本中使用操作。
在 a.sh
. SETVALUES
在 b.sh
. SETVALUES
在 SETVALUES
set -x
无论您在何处调用 SETVALUES,这些值都将在该子 shell 中设置。