Sử dụng & (dấu và) trong vòng lặp bash dòng đơn


58

Tôi đã sử dụng lệnh này thành công, nó thay đổi một biến trong tệp cấu hình, sau đó thực thi tập lệnh Python trong một vòng lặp:

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

Vì mỗi DoMyScript.pybản thân mất khoảng 30 giây để chạy trước khi kết thúc, tôi muốn đưa chúng xuống nền trong khi cái tiếp theo có thể được sinh ra.

Tôi đã thử những gì tôi quen thuộc, bằng cách thêm vào một dấu và như sau:

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

Tuy nhiên, điều này dẫn đến lỗi dưới đây:

-bash: lỗi cú pháp gần mã thông báo bất ngờ `; '

Câu trả lời:


85

Thả ;sau &. Đây là một yêu cầu cú pháp

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

1
Chết tiệt, 43 giây quá chậm :)
Martin von Wittich

2
@MartinvonWittich, +1 cho câu trả lời của bạn bằng cách bắt đầu ;-)
iruvar

4
Trong khi câu trả lời cho câu hỏi, có lẽ đó không phải là điều OP muốn vào lúc tất cả các phiên bản python đã bắt đầu và khởi tạo tất cả chúng sẽ thấy numbers.txtcó chứa 255.
Stéphane Chazelas

1
Đồng ý với @StephaneChazelas, nhưng không chắc chúng ta thực sự có thể làm gì với thông tin được đưa ra trong câu hỏi. Một giải pháp thích hợp cho điều đó có lẽ cần nhiều bối cảnh hơn.
một CVn

3
Đây là bash sổ tay hướng dẫn: gnu.org/software/bash/manual/bashref.html#Lists
glenn jackman

14

Đưa ra nhận xét của Stephane về câu trả lời của 1_CR , bạn có thể muốn:

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

Cảm ơn Glenn. Tôi đã thử một vài biến thể mã của bạn mà tôi thích do khả năng đọc tăng lên, nhưng có lẽ do tôi cần ngủ thêm, nó không hiệu quả với tôi. Nó cũng sẽ lặp lại số cuối cùng trong forphạm vi ... Đây là điều tôi hài lòng vào lúc này: for((i=1;i<100;i+=1)); do echo $i > numbers.txt;sleep 3; python DoMyScript.py & doneĐiểm câu hỏi chính của việc thực hiện quy trình để thực hiện trong nền được giải quyết.
ljs.dev

* tất nhiên, tôi đã có <=trong câu hỏi ban đầu, vì vậy phạm vi bạn cung cấp hoàn toàn phù hợp dựa trên thông tin tôi cung cấp. Một lần nữa, cảm ơn vì cách tiếp cận khác
ljs.dev

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.