2012-02-13 11 views
12

Tôi đang cố gắng để chạy 3 lệnh song song trong vỏ bash:Bash & (và) hành

$ (first command) & (second command) & (third command) & wait 

Vấn đề ở đây là nếu first command thất bại, ví dụ, mã thoát là 0 (I đoán vì wait thành công).

Hành vi mong muốn là nếu một trong các lệnh thất bại, mã thoát sẽ không khác (và lý tưởng là các lệnh đang chạy khác sẽ bị dừng).

Làm cách nào để đạt được điều này?

Xin lưu ý rằng tôi muốn chạy các lệnh song song!

Trả lời

4

tốt nhất tôi có thể nghĩ đến là:

first & p1=$! 
second & p2=$! 
... 

wait $p1 && wait $p2 && .. 

hoặc

wait $p1 || (kill $p2 $p3 && exit 1) 
... 

tuy nhiên điều này vẫn thực thi lệnh cho việc kiểm tra các quá trình, vì vậy nếu thứ ba thất bại ngay lập tức bạn sẽ không nhận thấy nó cho đến khi kết thúc đầu tiên và thứ hai.

4

Bạn nên sử dụng && thay vì &. ví dụ:

first command && second command && third command && wait 

Tuy nhiên điều này sẽ không chạy lệnh song song với mọi lệnh thực hiện sau sẽ phụ thuộc vào mã thoát 0 của lệnh trước.

+3

Tôi nghĩ rằng sẽ hoạt động theo điều khoản của mã trả về, nhưng sẽ không thực thi các lệnh song song. – jcollado

+0

Đồng ý và cũng đã ghi chú trong câu trả lời của tôi. Tuy nhiên, nếu các lệnh đang chạy song song thì bạn không thể kiểm tra mã thoát vì lệnh trước đó đã không thoát khi lệnh thứ hai chạy. – anubhava

+1

Hạn chế chính ở đây là chạy các lệnh ** song song **. Tôi không ngại thay thế một lớp lót này bằng kịch bản bash phức tạp hơn, miễn là các lệnh sẽ chạy song song và mã thoát sẽ không khác trong trường hợp lỗi. –

2

Điều này có thể làm việc cho bạn:

parallel -j3 --halt 2 <list_of_commands.txt 

này sẽ chạy 3 lệnh song song.

Nếu bất kỳ công việc nào không hoạt động, nó sẽ giết các công việc còn lại đang chạy và sau đó dừng lại, trả về mã thoát của công việc thất bại.

+0

Bạn có thể cung cấp con trỏ tới tài liệu 'song song' không? –

+0

Nó sẽ chạy 3 lệnh song song nhưng sẽ không đáp ứng yêu cầu mã thoát của OP. – anubhava

+0

@MishaMoroshko google gnu song song. @anubhava từ cẩm nang song song '--halt 2 Giết tất cả các công việc ngay lập tức và thoát mà không dọn dẹp. Trạng thái thoát sẽ là trạng thái thoát khỏi công việc thất bại.' – potong