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

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

bashを使用して複数のコマンドを実行し、バックグラウンドで実行する方法は?

たとえば、

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

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

これでエラーが発生します。

syntax error near unexpected token `;'

上記のコマンドを実行したとき。

バックグラウンドでは、コマンドは並列に実行する必要があります。

答え1

&;同じリストターミネーターオペレーター。これらは同じ構文を持ち、(必要な操作に応じて)互いに置き換えて使用できます。これはあなたが望むか必要とするのではなく、command1 &; command2単に必要であることを意味しますcommand1 & command2

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

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

waitコマンドはバックグラウンドで始まり、ループはすぐに次のコマンドに移動します。

答え2

互換性のために拡張の代わりにposix形式を使用してください。

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

答え3

コマンドをグループ化し、グループ化されたコマンドをバックグラウンドに配置できます。良い:

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

答え4

バイナリに実際に名前がありますかwait?これはwaitシェルに組み込まれているため、お勧めしません。

私はbashがバックグラウンドプロセスをうまく開始する単一のラインループを解析しないと思います。コードを次のように変更することをお勧めします。

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

関連情報