在Z-shell中捕获子进程的结果

在Z-shell中捕获子进程的结果
AAA <options>; CCC AAA <options>

AAACCC是不同的命令。

这里我们在 zsh 脚本中 - 例如:

vi script.zsh
<...>
AAA <options>; CCC AAA <options>
<...>

详细:如果我错了,CCC AAA <options>请纠正我AAA <options>,将使用子 shell,然后从当前 shell 创建一个单独的进程,或者可能使用当前 shell,然后从运行当前脚本的进程创建一个子进程。

问题是完成CCC后仍会存活。script.zsh这会导致问题,当我尝试调用结果时 - 而不是返回值(它确实在完成后创建了一些东西 - 为 ie 新创建的对象CCC AAA <options>AAA <options> 里面 script.zsh引起not found警告。

话虽如此,如何让currentscript.zsh可以看到结果呢'AAA <options>'

如果可能的话,瞄准 Z 壳。

编辑:应该是:

AAA <options>; CCC AAA <options>

答案1

不,

CCC 'AAA <options>'

CCC从一个字面参数开始AAA <options>。每个外壳都是一样的。您可以使用以下echo命令代替CCC

$ echo 'AAA <options>'
AAA <options>

如果您想CCC将 的输出(不带尾随换行符)作为AAA单个参数进行调用,您可以这样做:

CCC "$(AAA <options>)"

如果您想使用CCC与输出中尽可能多的单词AAA(空格、制表符、换行符、NUL 分隔)进行调用,您可以这样做:

CCC $(AAA <options>)

无论如何,在返回CCC之前不会启动AAA,并且脚本在CCC返回之前不会终止。

对于要在命令返回之前终止的脚本,您需要它异步启动该命令,如下所示:

CCC args &

无论如何,这在每个 shell 中都是相同的,它不是zsh特定的(除了上面 NUL 上的拆分)。

相关内容