【发布时间】:2016-09-23 05:27:12
【问题描述】:
我认为这归结为我没有完全理解 GNU Parallel 的进程是如何划分的。我查了一下,如果在 GNU Parallel 中使用变量会发生冲突,我在网上几乎没有发现任何东西。
如果我在并行中使用如下命令:
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 会在并行运行的不同进程之间混淆吗?
【问题讨论】:
-
嗯? GNU Parallel 甚至永远不会看到您的变量,因为它们在管道符号 (
|) 之后以及在读取 GNU Parallel 输出的后续进程中。你到底想做什么——只用简单的英语? -
我正在尝试在读取命令中使用变量。我担心如果这些变量“并行”运行,那么它可能会被错误地覆盖或替换。这更有意义吗?抱歉,如果我不清楚,请尝试描述。
-
这是一种可能的方法:
echo "$textdata" | parallel -j5 --pipe myscript.sh和myscript.sh包含:while read line; do...如果行数不多,这很好。如果有很多行,想办法在没有while read line的情况下编写任务脚本,否则它肯定会运行缓慢。 -
嗨,Webb,这样可以避免变量重叠?
-
是的,parallel 会运行 5 个
myscript.sh的实例,每个实例都会有一些行,每个实例的变量不会重叠。
标签: linux bash variables unix gnu-parallel