2015-06-03 25 views
6

Tôi muốn chạy chương trình prog song song bằng cách sử dụng GNU parallel, với đối số nhận giá trị theo trình tự. Ví dụ:GNU song song với chuỗi biến?

parallel prog ::: {1..100} 

Tuy nhiên, tôi không biết các giới hạn trên của dãy trước, vì vậy tôi muốn để có thể làm điều gì đó như:

parallel prog ::: {1..$x} 

nơi $x là một con số mà tôi sẽ tính toán ở đâu đó. Làm thế nào tôi có thể đạt được điều này?

+0

Bạn sẽ cần 'eval'. – jordanm

+0

'eval' có thể được sử dụng, nhưng không cần thiết hoặc được khuyến nghị. – chepner

Trả lời

5

Giả sử chương trình seq (hoặc một cái gì đó giống như nó) có sẵn,

parallel prog ::: $(seq 1 $x) 

Nếu không, bạn có thể giả mạo nó:

parallel prog ::: $(for ((i=1; i < x; i++)) do; echo $i; done) 

Như Ole chỉ ra, nếu $x là lớn, sau đó chuỗi kết quả của các số có thể quá lớn để vừa với dòng lệnh. Trong trường hợp đó, sử dụng một trong hai phương pháp trên để nạp các đối số cho parallel thông qua đầu vào tiêu chuẩn:

seq 1 "$x" | parallel prog 
for ((i=1; i<x; i++)) do; echo "$i"; done | parallel prog 
+1

Nếu $ x lớn: seq $ x | song song prog –