Lặp lại công việc nền


81

Tôi cố gắng chạy một công việc nền trong vòng lặp for trong bash:

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

Tôi gặp lỗi:

bash: syntax error near unexpected token `;'

Trong zsh dòng lệnh hoạt động.


3
Bạn đang cố gắng đặt bit nào trong nền? như mà đọc bạn đang cố gắng để thực hiện giấc ngủ trong nền đó sẽ là vô nghĩa ..
BugFinder

4
sleep chỉ để kiểm tra vòng lặp của tôi trước khi trường hợp thực sự.
bougui

Câu trả lời:


122

Gỡ bỏ ; sau khi ngủ

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

BTW, các vòng lặp như vậy được viết tốt hơn trên các dòng riêng biệt với thụt lề thích hợp (nếu bạn đang viết điều này trong tệp kịch bản shell).

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

4
Hãy nhớ rằng nó sẽ chỉ gửi "sleep 2" ở chế độ nền.
tamerlaha

Tại sao khi tôi làm điều này với $ilệnh chạy nền, điều khiển công việc lại cho biết tên tiến trình chứa $ithay vì bất kỳ giá trị thực tế $inào là?
Michael

@Michael Chương trình đầy đủ với đầu ra sẽ giúp hiểu rõ hơn
gammay

for I in <whatever>; do rm -fr $I & done... jobs-> rm -fr $Inhiều lần, thay vì đồng dir thực bị xóa cho mỗi công việc
Michael

Tôi có câu trả lời cho điều này, nó dài. Vì vậy, tôi nghĩ bạn nên đăng nó dưới dạng một câu hỏi mới (và thêm liên kết câu hỏi đó vào đây), tôi sẽ trả lời và bạn cũng sẽ nhận được nhiều phản hồi hơn.
gammay

42

Bạn có thể đặt lệnh nền trong ()

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

9
Xin lưu ý: Bạn tạo một vỏ con bằng cách đó. Nó cũng có nghĩa là bạn sẽ không thể waitkết thúc các công việc nền.
JFK
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.