假设我在脚本“a.sh”中使用了
是否有可能让“b.sh”继承自“a.sh”的
set -x
命令,并调用了另一个脚本“b.sh”。是否有可能让“b.sh”继承自“a.sh”的
-x
选项?export SHELLOPTS
例如:echo date > b
chmod +x b
如果没有导出,当./a
调用./b
时,我们只会看到./a
中的命令:
$ 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中设置。
.
或source
命令来调用b.sh
脚本。 - devnull