2016-09-23 3 views
0

Я думаю, это сводится к тому, что я не совсем понимаю, как разделяются процессы GNU Parallel. Я посмотрел, если использование переменных с GNU Parallel будет конфликтовать, и я нашел очень мало ничего в Интернете.Будет ли работать параллельная команда GNU с переменными, вызывающими конфликт?

Если я использую команду вроде следующего с параллельным:

echo "$textdata" | parallel -j5 cat | for line in file; do var1=$(echo $line); var2=$(echo "$line" | grep -A 1); var3=$(echo "$line" | somecommand); echo "$var1" "$var2" "$var3"; done 

Будет ли это конфликт путем переопределения друг с другом при использовании переменной? Или он работает в разных процессах и может использоваться одна и та же переменная?

Другими словами, будут ли пустые переменные $ var1, $ var2 или $ var3 запущены параллельно?

+1

А? ** GNU Parallel ** никогда не увидит ваши переменные, как они есть после символа трубы ('|'), и в следующем процессе, который читает вывод ** GNU Parallel **. Что вы на самом деле пытаетесь сделать - просто на английском? –

+0

Я пытаюсь использовать переменные в команде чтения. Я обеспокоен тем, что если эти переменные работают «параллельно», тогда он может быть перегружен или заменен неправильно. Это имеет смысл? Извините, если я не понимаю, пытаясь описать. – DomainsFeatured

+1

вот возможный способ сделать это: 'echo '$ textdata" | parallel -j5 --pipe myscript.sh' и 'myscript.sh' содержит:' while read line; do ... 'это прекрасно, если линий не так много. если есть много строк, подумайте о способе сценария вашей задачи без 'while read line', или он определенно будет работать медленно. – webb

ответ

0

Для тех, кто еще хочет знать, если работает переменные в GNU параллельно будут перекрываться, просто просто взять команду, например:

echo "$textdata" | parallel -j5 cat | for line in file; do var1=$(echo $line); var2=$(echo "$line" | grep -A 1); var3=$(echo "$line" | somecommand); echo "$var1" "$var2" "$var3"; done 

и запустить команду как script.sh:

for line in file; do var1=$(echo $line); var2=$(echo "$line" | grep -A 1); var3=$(echo "$line" | somecommand); echo "$var1" "$var2" "$var3"; done 

, таким образом, будет:

echo "$textdata" | parallel -j5 /script.sh 

Надеется, что это помогает кто работает с параллельным и варом iables.

 Смежные вопросы

  • Нет связанных вопросов^_^