各反復で非同期コマンドを実行するforループを記述する方法は?


23

ループ内で非同期コマンドを使用するとエラーが発生するのはなぜですか?

$ for i in {1..8}; do sleep 100 & ; done
bash: syntax error near unexpected token `;'

私がそれを

$ for i in {1..8}; do 
> sleep 100 & 
> done

これは正常に動作します。

エラーなしで1行に書き込むにはどうすればよいですか?

回答:


39

ドロップ;

for i in {1..8}; do sleep 100 & done

&コマンドを分離するので、;無関係である(とシェルとの間に何かを期待する&;)。


ありがとう。「シェルは&と;の間に何かを期待している」ので、なぜ&と;の間に空のコマンドを使用できないのですか
ティム

5
リアルノーオペレーションコマンドは次のとおりです。
HTNW

1
@StephenKitt、あなたが参照するセクションも述べています:「対話型セッションまたは他のコマンドを含むスクリプトでは、余分な<newline>または<semicolon>文字...文法の一部。」うーん...
ワイルドカード

1
興味深い@Wildcard、私はティムのフォローアップへの答えを研究するときにその文の結果を考えていませんでした。BashのPOSIXモードを有効にしても、これに関する動作は変わりません。うーん確かに...
スティーブン・キット

2
@Wildcard:echo foo ; ; echo barbash 4.4で言うsyntax error near unexpected token `;'dash同様のエラーが発生します。この場合、文法の他の部分はそれを消費しないため、空のコマンドです。彼らは(改行)の;ような行の終わりに冗長性について話しているのではないかと思いsleep 100;ます。
ピーターコーデス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.