
だからwhileループがあります。
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
しかし、時間がかかることがあります。このwhileループを実行するためにGNU Parallelをどのように使用しますか?
答え1
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
答え2
「うまくやる」ことをする古いUnixユーザーとして、私は文字列置換の内容をラッパースクリプトに入れます。
#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"
呼び出す場合、wrapper.sh
呼び出しparallel
コマンドは次のようになります。
parallel wrapper.sh < live_hosts
cat
外部プログラム呼び出しを保存するこの種の操作は必要ありません。
答え3
あなたはしません必要 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
ただし、一部の側面では、管理が容易になり、同時に実行されるジョブの数をより簡単に制限できます。