2015-06-03 3 views
6

Я хочу запустить программу prog параллельно с помощью GNU parallel с аргументом, который принимает значение в последовательности. Например:GNU параллельна переменной последовательности?

parallel prog ::: {1..100} 

Однако, я не знаю, что верхняя граница последовательности заранее, так что я хотел бы быть в состоянии сделать что-то вроде:

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

где $x ряд что я где-нибудь буду вычислять. Как я могу это достичь?

+0

Вам понадобится 'eval'. – jordanm

+0

'eval' можно использовать, но не обязательно или рекомендуется. – chepner

ответ

5

Предполагая программу seq (или нечто подобное) доступно,

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

Если нет, то вы можете подделать:

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

Как Ole указывает, если $x велико, то результирующая последовательность чисел может быть слишком большой, чтобы соответствовать командной строке. В этом случае используйте один из двух методов выше для подачи аргументов на parallel через стандартный ввод:

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

Если $ x большой: seq $ x | параллельный прог –