2つのLinuxコマンドを実行して、それぞれが終了せずにstdoutに出力し続けます(I Ctrl-C
まで)。フォアグラウンドで2つのLinuxコマンドを実行し、標準出力をマージすることは可能ですか
2つのコマンドを2つの別々の端末で問題なく実行できます。
しかし、1つの端末で1つのコマンドを実行して、上記の両方のコマンドをフォアグラウンドで実行し、それらをstdoutで共有することはできますか?
2つのLinuxコマンドを実行して、それぞれが終了せずにstdoutに出力し続けます(I Ctrl-C
まで)。フォアグラウンドで2つのLinuxコマンドを実行し、標準出力をマージすることは可能ですか
2つのコマンドを2つの別々の端末で問題なく実行できます。
しかし、1つの端末で1つのコマンドを実行して、上記の両方のコマンドをフォアグラウンドで実行し、それらをstdoutで共有することはできますか?
これは非常に簡単にGNUパラレルで制御できます。ダミーの2つのプロセスf1
とf2
を繰り返し出力して止めることはないとしましょう。彼らは、次のようになります。
F1
#!/bin/bash
while :; do
echo 1,$RANDOM
sleep 2
done
F2今
#!/bin/bash
while :; do
echo 2,$RANDOM
sleep 2
done
一度に両方を開始することができます(明らかに - それはGNUと呼ばれる理由もなくを平行ではないです)このように:
parallel --line-buffer ::: ./f1 ./f2
1,17387
2,1457
2,32743
1,15684
...
...
それとも、あなたはプロセス名でタグ付けされた出力の行をしたい場合、あなたはこれを行うことができます。
parallel --line-buffer --tag ::: ./f[12]
./f1 1,11877
./f2 2,28716
./f2 2,7683
./f1 1,23392
...
...
あなたはControl-Cプロセス場合は、彼らは両方とも停止します - あなたはどうかということを変更することができますが、希望 - --halt
をマンページで検索します。
使用中括弧:
{ command1; command2; } > output
あなたがstdoutとstderrの両方リダイレクトしたい場合:
{ command1; command2; } &> output
これは、command1が終了するまでcommand2を実行しません。しかし、OPは、どちらのコマンドも終了するまで終了しないことを明確にしており、意図は両方とも並行して実行されているということです。 – rici
をあなたは最前面に背景に最初の2つ目を実行することができます彼らが共有することになりますstdout。 Ctrl-C
で2番目のものを止めることができますし、1番目を止めたい場合は仕事を殺す必要があります。プレスfg
その後、Ctrl-C
cmd1 & cmd2
あなたがミックス出力ファイルを持つようにしたい場合は、
cmd1>file & cmd2>file
あなたが;
代わりの&
を使用する場合は、2番目のコマンドがします開始第一終了あなたがもっと欲しい場合は読み取り可能な出力。
両方の端末を同じ端末で実行し、それらを一緒に停止できるかどうかは不明です。スクリプトなどを使用している可能性があります。
'stdbuf'でコマンドを実行して、出力行をマージすることができます。 – hek2mgl
ありがとう、ニコラス。これは実際には、ユーザーがバックグラウンドプロセスに対処しなければならないという点を除いて、悪い選択肢ではありません。 –
これについて知りませんでした。大好きです!私はこれがビルトインのものだったと思う。ありがとう! –
** GNU Parallel **は悲しいほど広告が下りすぎて使用されていません。前年同期のCPU周波数の増加とマルチコア時代の始まりに伴い、IMHOが前進しています。あなたのプロジェクトに幸運を祈る! –