Her yinelemede eşzamansız bir komut çalıştıran bir for döngüsü nasıl yazılır?


23

Neden bir döngü içinde eşzamansız komut kullanılırken bir hata olduğunu merak ediyorum?

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

Olarak yazarsam

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

bu iyi çalışıyor.

Tek satırda hatasız nasıl yazabilirim?

Yanıtlar:


39

Bırak şunu ;:

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

&komutları birbirinden ayırır , dolayısıyla ;dışsaldır (ve kabuk &ve arasında bir şey bekler ;).


Teşekkürler. "kabuk, & ve; arasında bir şey bekliyor", öyleyse boş bir komut neden & ve;
Tim

5
Gerçek no-op komutu şudur:
HTNW 18:17

1
@StephenKitt, başvuruda bulunduğunuz bölüm ayrıca şunları da belirtir: "Etkileşimli bir oturumda veya başka komutları içeren bir komut dosyasında, fazladan <newline> veya <semicolon> karakterleri ... burada açıklanan boş komut olarak nitelendirilmez, çünkü diğerleri tarafından tüketilir. gramerin bölümleri. " Hmmm ...
Joker

1
@Wildcard ilginç, Tim'in takibinin cevabını araştırırken bu cümlenin sonuçlarını düşünmemiştim. Bash'in POSIX modunu etkinleştirmek, bu konudaki davranışını değiştirmez. Hmmm gerçekten ...
Stephen Kitt

2
@Wildcard: echo foo ; ; echo barbash 4.4 diyor syntax error near unexpected token `;'. dashbenzer bir hata veriyor. Bu durumda, bu boş bir komuttur çünkü gramerin başka bir kısmı onu tüketmez. Sanırım (newline) ;gibi bir satırın sonunda gereksiz hakkında konuşuyor olabilirler sleep 100;.
Peter Cordes

22

Grup senin dokıvırcık parantez içinde eylemler:

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

Bash'in yanı sıra sizin için de kolay!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.