Gunakan & (ampersand) dalam satu lingkaran bash loop


58

Saya telah berhasil menggunakan perintah ini, yang mengubah variabel dalam file konfigurasi kemudian mengeksekusi skrip Python dalam satu loop:

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

Karena masing-masing DoMyScript.pysendiri membutuhkan waktu sekitar 30 detik untuk dijalankan sebelum diakhiri, saya ingin memindahkannya ke latar belakang sementara yang berikutnya dapat muncul.

Saya sudah mencoba apa yang saya kenal, dengan menambahkan ampersand seperti di bawah ini:

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

Namun, ini menghasilkan kesalahan di bawah ini:

-bash: kesalahan sintaksis dekat token yang tidak diharapkan `; '

Jawaban:


85

Jatuhkan ;setelah &. Ini adalah persyaratan sintaksis

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

1
Sialan, 43 detik terlalu lambat :)
Martin von Wittich

2
@MartinvonWittich, +1 untuk jawaban Anda dengan rasa simpati ;-)
iruvar

4
Sementara itu menjawab pertanyaan, itu mungkin bukan apa yang diinginkan OP seperti pada saat semua contoh python telah dimulai dan menginisialisasi mereka semua akan melihat numbers.txtmengandung 255.
Stéphane Chazelas

1
Setuju dengan @StephaneChazelas, tetapi saya tidak yakin apa yang dapat kita lakukan dengan informasi yang diberikan dalam pertanyaan. Solusi yang tepat untuk itu mungkin membutuhkan lebih banyak konteks.
CVn


14

Mengingat komentar Stephane pada jawaban 1_CR , Anda mungkin ingin:

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

Terima kasih Glenn. Saya mencoba beberapa variasi kode Anda yang saya suka karena peningkatan keterbacaan, tetapi mungkin karena tidur tambahan yang saya butuhkan, itu tidak berhasil bagi saya. Itu juga akan mengulangi angka terakhir dalam forkisaran ... Inilah yang saya senangi saat ini: for((i=1;i<100;i+=1)); do echo $i > numbers.txt;sleep 3; python DoMyScript.py & doneTitik pertanyaan utama untuk mendapatkan proses untuk mengeksekusi di latar belakang terpecahkan.
ljs.dev

* tentu saja, saya ada <=di pertanyaan awal, jadi kisaran yang Anda berikan benar-benar cocok berdasarkan info yang saya berikan. Sekali lagi, terima kasih atas pendekatan yang berbeda
ljs.dev

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.