web-dev-qa-db-ja.com

同じコマンドをバックグラウンドで複数回実行する

複数のコマンドを実行し、bashを使用してそれらをバックグラウンド化することはどのように可能ですか?

例えば:

$ for i in {1..10}; do wait file$i &; done

ここで、待機はカスタムバイナリです。

今私はエラーが出ます:

syntax error near unexpected token `;'

上記のコマンドを実行すると。

バックグラウンド化すると、コマンドは並行して実行されます。

14
Sebi

&と同様に、;リストターミネータ 演算子です。それらは同じ構文を持ち、同じように使用できます(何をしたいかによって異なります)。これは、command1 &; command2を必要としない、または必要としないことを意味します。必要なのはcommand1 & command2だけです。

したがって、あなたの例では、次のように書くことができます:

for i in {1..10}; do wait file$i & done

waitコマンドはバックグラウンドで起動され、ループはすぐに次のループに進みます。

21
terdon

互換性のために、展開ではなくposix形式を使用します。

for i in $(seq 1 10); do (./wait file$i &); done
4
marc

コマンドをグループ化して、グループ化されたコマンドをバックグラウンドで実行できます。お気に入り :

$ for i in {1..10}; do ((wait file$i)&); done
2
mazs

バイナリは本当にwaitという名前ですか? waitはシェルに組み込まれているため、この方法はお勧めしません。

Bashは、バックグラウンドプロセスを起動する1行のループをうまく解析できないと思います。コードを次のように変更することをお勧めします。

$ for i in {1..10}; do ./wait file$i & echo "Running 'wait' using PID=$!..."; done