回答:
whileループは使用しません。
parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts
パスがlive_hosts(たとえば/some/dir/file)に展開されている場合sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file(結果はno such file or directory)であるため、これは機能しないことに注意してください。これらの場合は{//}、{/}以下を使用します(詳細はgnu-parallelマニュアルを参照):
parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts
>られ| teeます parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
ループの本体は以前の反復に依存しないため、必要 はありparallelません。ホストごとに新しいバックグラウンドプロセスを開始するだけです。
while read host; do
sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait # Optional, to block until the background tasks are done
parallelただし、特定の側面の管理が容易になります。並行して実行するジョブの数をより簡単に制限できます。
wc -l live_hostsディスクスピンドルまたはCPUコアの数よりも大きい場合(タスクがI / OであるかCPUバインドであるかによって異なります)、そのようなソリューションで並列処理から得られる多くの利点を使い果たしてしまいます。parallel処理速度を目標とする場合、ジョブの数を制限する機能は優れているだけでなく、ほぼ不可欠です。
teewith を使用することは可能ですか?そのため、出力を確認できます。parallelsortedstuff