假设我在脚本“a.sh”中执行set -x
,并调用另一个脚本“b.sh”。
是否可以让“b.sh”从“a.sh”继承-x
选项?
答案 0 :(得分:25)
export SHELLOPTS
例如:
echo date > b
chmod +x b
没有导出,我们只会在调用./a
时看到./b
中的命令:
$ echo ./b > a
$ bash -xv a
./b
+ ./b
Sun Dec 29 21:34:14 EST 2013
但如果我们导出SHELLOPTS,我们会看到./a
和./b
$ echo "export SHELLOPTS; ./b" > a
$ bash -xv a
./b
+ ./b date
++ date
Sun Dec 29 21:34:36 EST 2013
答案 1 :(得分:3)
由于-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
答案 2 :(得分:0)
如果脚本b sources脚本a,它们将被合并到脚本b中。哪个可能会或可能不会解决您的问题!
答案 3 :(得分:0)
与@devnull一样,您可以在脚本中使用.
操作。
在a.sh
. SETVALUES
在b.sh
. SETVALUES
在SETVALUES中
set -x
无论你调用SETVALUES,这些值都将在该子shell中设置。