将 stdout 存储在变量中并将命令发送到后台

将 stdout 存储在变量中并将命令发送到后台

我在 bash 脚本中有一个命令,我想捕获该命令的输出,然后将其发送到后台。我该如何完成这件事?

以下似乎不起作用(它一直阻塞并且不输出任何内容)

result=`node /var/www/animekyun/node/node_modules/peerflix/app.js $torrent -r -q &`

这似乎不起作用。顺便说一句,输出是 2 行,我想将其作为数组存储在变量中。这样我就可以在脚本的其余部分使用输出。

答案1

未经测试,但这可能适用于 FIFO:

filename=/tmp/my.fifo
mkfifo $filename
node /var/.../app.js $torrent -r -q >$filename &
{ read first_line; read second_line; } <$filename

# do something with "$first_line" and "$second_line"

答案2

你想要的(据我理解)是不可能的。您无法收集输出(使用命令替换)并且然后在后台运行该程序。原因很简单,输出是在进程的整个生命周期内收集的。一个进程在停止产生输出后可能会存活很长时间,但 shell 无法知道这一点。

您必须将输出重定向到文件,并且必须在输出完成时以某种方式(即特定于应用程序的)进行检查(如果您不想等待该过程完成)。

node /var/www/animekyun/node/node_modules/peerflix/app.js $torrent -r -q >file &
[...]
result="$(<file)"

相关内容