バックグラウンドジョブをループする


81

bashのforループでバックグラウンドジョブを実行しようとしています:

for i in $(seq 3); do echo $i ; sleep 2 & ; done

エラーが発生します:

bash: syntax error near unexpected token `;'

zshでは、コマンドラインが機能します。


3
バックグラウンドでどのビットを配置しようとしていますか?それはあなたが...無意味になり、バックグラウンドでの睡眠をやろうとしている読み取っとして
BugFinder

4
スリープは、実際のケースの前にループをテストするためだけのものです。
bougui 2012

回答:


124

;を削除します。睡眠後

for i in $(seq 3); do echo $i ; sleep 2 & done

ところで、このようなループは、適切なインデントを使用して別々の行に記述する方が適切です(これをシェルスクリプトファイルで記述している場合)。

for i in $(seq 3)
do
   echo $i
   sleep 2 &
done

4
「sleep2」はバックグラウンドにのみ送信されることに注意してください。
tamerlaha 2017年

$iバックグラウンドコマンドでこれを行うと、ジョブコントロールが$i、実際の値で$iはなくプロセス名に含まれていると表示するのはなぜですか?
マイケル

出力と@Michael完全なプログラムは、より良い理解するのに役立つだろう
gammay

for I in <whatever>; do rm -fr $I & done...- jobs>rm -fr $Iジョブごとに実際のディレクトリが削除される代わりに、数回
Michael

私はこれに対する答えを持っています、その長いです。だから私はあなたがそれを新しい質問として投稿するべきだと思います(そしてここにその質問リンクを追加してください)、私は答えます、そしてあなたはまたより多くの応答を得るでしょう。
gammay

42

バックグラウンドコマンドを()に入れることができます

for i in $(seq 3); do echo $i ; (sleep 2 &) ; done

10
注意してください:あなたはそれによってサブシェルを作成します。またwait、バックグラウンドジョブを終了することができなくなることも意味します。
JFK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.