Tek satır bash döngüsünde & (ve işareti) kullanın


58

Bir config dosyasındaki bir değişkeni değiştiren bu komutu başarıyla kullanıyorum ve sonra bir döngü içerisinde Python betiğini çalıştırıyorum:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py; done

Her birinin DoMyScript.pysona ermesinden önce koşması yaklaşık 30 saniye sürdüğü için, bir sonrakinin doğabilmesi için onları arka plana devretmek istiyorum.

Aşina olduğum şeyi, aşağıdaki gibi bir işaretçi ekleyerek denedim:

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py &; done

Ancak, bu aşağıdaki hataya yol açar:

-bash: beklenmedik belirteci `; '

Yanıtlar:


85

;Sonra bırak &. Bu sözdizimsel bir gerekliliktir

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py & done

1
Kahretsin, 43 saniye çok yavaş :)
Martin von Wittich

2
@MartinvonWittich, misilleme yoluyla cevabınıza bir +1 ;-)
iruvar

4
Bu soruya cevap verirken, muhtemelen muhtemelen tüm python örneklerinin başladığı ve bir numbers.txtiçerdiklerini görecekleri ilkleri başladığında OP'nin istediği şey değildir 255.
Stéphane Chazelas 20:13

1
@StephaneChazelas ile anlaştınız, ancak soruda verilen bilgilerle bu konuda gerçekten ne yapabileceğimize emin değilim. Bunun için uygun bir çözüm muhtemelen daha fazla bağlam gerektirir.
CVn

3
İşte bash el kitabı referansı: gnu.org/software/bash/manual/bashref.html#Lists
glenn jackman

14

Stephane'in 1_CR'nin cevabı üzerine yaptığı yorumda muhtemelen aşağıdakileri yapmak istiyorsunuz:

for i in {114..255}; do { echo $i > numbers.txt && python DoMyScript.py; } & done

Sağol Glenn. Kodunuzun artan okunabilirliği nedeniyle sevdiğim birkaç değişiklik yaptım, ama belki de ihtiyacım olan ekstra uyku nedeniyle, benim için işe yaramadı. Aynı zamanda, forserideki son sayıyı da tekrarlardı ... İşte şu andan memnun olduğum şey: for((i=1;i<100;i+=1)); do echo $i > numbers.txt;sleep 3; python DoMyScript.py & doneArka planda yürütülecek sürecin asıl soru noktası çözüldü.
ljs.dev

* Tabii ki, <=orjinal sorum vardı , bu yüzden sağladığınız aralık verdiğim bilgilere dayanarak tamamen uygun oldu. Yine, farklı yaklaşım için teşekkürler
ljs.dev

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.