2015-03-03 3 views
1

У меня есть часть кода bash, которая пересекает имена файлов, которые находятся в строке, разделенной пробелами. Затем выполняется функция против каждого имени файла. Это выглядит так:Разделение строки по пространству на трубу в параллель в bash

TCURR=0 
for F in $FILES; do 
    TCURR=$[TCURR + 1] 
    do_something $TCURR $F & 
done 
wait 

Как это сделать с помощью gnu parallel? Я не могу понять, как передать переменную $ FILES в нее, чтобы она работала.

Вот что я пробовал, ни одна из которых не работает. Я основывал их на странице параллельных примеров. Я просто отправляю 1 вместо TCURR в качестве первой переменной для функции для простоты, хотя я хотел бы знать, как это сделать.

$FILES | parallel "do_something 1 {}"

echo $FILES | parallel "do_something 1 {}"

ответ

1
parallel do_something {#} {} ::: $FILES 
+1

Удивительные не знаете, что вы можете использовать {#} в качестве счетчика. – Tim

0

Фигурные это, только необходимые кавычки переменной. Так он выглядит:

echo "$FILES" | parallel "do_something 1 {}"

Хотя я не понял, как сделать встречную работу еще

1

Вы, наверное, хотите:

#!/bin/bash 
FILES=.... 
TCURR=0 
for F in $FILES; do 
    ((TCURR++)) 
    echo do_something $TCURR $F 
done | parallel