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