複数のコマンドを実行し、bashを使用してそれらをバックグラウンド化することはどのように可能ですか?
例えば:
$ for i in {1..10}; do wait file$i &; done
ここで、待機はカスタムバイナリです。
今私はエラーが出ます:
syntax error near unexpected token `;'
上記のコマンドを実行すると。
バックグラウンド化すると、コマンドは並行して実行されます。
&
と同様に、;
は リストターミネータ 演算子です。それらは同じ構文を持ち、同じように使用できます(何をしたいかによって異なります)。これは、command1 &; command2
を必要としない、または必要としないことを意味します。必要なのはcommand1 & command2
だけです。
したがって、あなたの例では、次のように書くことができます:
for i in {1..10}; do wait file$i & done
各wait
コマンドはバックグラウンドで起動され、ループはすぐに次のループに進みます。
互換性のために、展開ではなくposix形式を使用します。
for i in $(seq 1 10); do (./wait file$i &); done
コマンドをグループ化して、グループ化されたコマンドをバックグラウンドで実行できます。お気に入り :
$ for i in {1..10}; do ((wait file$i)&); done
バイナリは本当にwait
という名前ですか? wait
はシェルに組み込まれているため、この方法はお勧めしません。
Bashは、バックグラウンドプロセスを起動する1行のループをうまく解析できないと思います。コードを次のように変更することをお勧めします。
$ for i in {1..10}; do ./wait file$i & echo "Running 'wait' using PID=$!..."; done