如何让bash subshel​​l继承父级的set选项?

dsp*_*pjm 24 linux bash

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

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

小智 27

export SHELLOPTS
Run Code Online (Sandbox Code Playgroud)

例如:

echo date > b
chmod +x b
Run Code Online (Sandbox Code Playgroud)

如果没有导出,我们只会在./a调用时看到命令./b:

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

./b
+ ./b
Sun Dec 29 21:34:14 EST 2013
Run Code Online (Sandbox Code Playgroud)

但是,如果我们出口SHELLOPTS,我们看到的命令./a./b

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

./b
+ ./b  date
++ date   
Sun Dec 29 21:34:36 EST 2013
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于set -e和$(...)中的子外壳:bash4 -c set -eC; 设置-o pipefail; 出口SHELLOPTS;f(){假; 回声 }; foo =(bar“ $ {f)”); echo end'`,而具有显式`$(set -e; ...)`的行为则不同:`bash4 -c'set -eC; 设置-o pipefail; f(){假; 回声 }; foo =(bar“ $(set -e; f)”); 回声结束' (2认同)