如何让bash subshel​​l继承父设置的选项?

时间:2013-07-25 08:27:16

标签: linux bash

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

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

4 个答案:

答案 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中设置。