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

あなたが望むものは(私が理解する限り)不可能です。コマンド置換を使用して出力を収集することはできません。それからバックグラウンドでプログラムを実行します。その理由は簡単です。出力はプロセス寿命中に収集されます。プロセスは出力の生成を中断した後も長く続くことがありますが、シェルはこれを知りません。

出力をファイルにリダイレクトする必要があり、出力が完了したら(プロセスが完了するのを待たない場合)、何らかの方法でアプリケーションごとに確認する必要があります。

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

関連情報