Shell 嵌套壳

Shell 嵌套壳,shell,Shell,我有两个shell脚本: $ cat a #!/bin/sh set -o xtrace ./b $ cat b #!/bin/sh set -o xtrace echo Oook. $ ./a + ./b + echo Oook. Oook. 是否可以将shell设置为从单独的脚本嵌套xtrace输出?我想看看: $ ./a + ./b ++ echo Oook. Oook. 请注意,可以在同一脚本的子shell中看到嵌套的xtrace输出: $ cat c #!/bin/sh set

我有两个shell脚本:

$ cat a
#!/bin/sh
set -o xtrace
./b

$ cat b
#!/bin/sh
set -o xtrace
echo Oook.

$ ./a
+ ./b
+ echo Oook.
Oook.
是否可以将shell设置为从单独的脚本嵌套xtrace输出?我想看看:

$ ./a
+ ./b
++ echo Oook.
Oook.
请注意,可以在同一脚本的子shell中看到嵌套的xtrace输出:

$ cat c
#!/bin/sh
set -o xtrace
echo $(yes | head -c1)

$ ./c
++ yes
++ head -c1
+ echo y
y

我认为不可能使用未经修改的
a
脚本。但是,如果您能够/愿意修改脚本调用,可以通过寻找合适的脚本来完成。即:

$ cat a
#!/bin/sh
set -o xtrace
. ./b               # Note: sourcing ./b
$ ./a
+ . ./b
++ set -o xtrace
++ echo Oook.
Oook.
$

我可以更改
a
脚本,但是它会输出另一个
+set-o xtrace
行。我不想在hashbang行中移动
-o xtrace
,因为直接运行解释器可以忽略参数
sh./a
,恐怕您将不得不使用额外的
集合-o xtrace
。毕竟,这是一个命令,您请求跟踪命令。如果确实需要,您可以轻松地过滤输出。