【问题标题】:Will Running A GNU Parallel Command With Variables Cause Conflict?运行带有变量的 GNU 并行命令会导致冲突吗?
【发布时间】: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.shmyscript.sh 包含:while read line; do... 如果行数不多,这很好。如果有很多行,想办法在没有while read line 的情况下编写任务脚本,否则它肯定会运行缓慢。
  • 嗨,Webb,这样可以避免变量重叠?
  • 是的,parallel 会运行 5 个 myscript.sh 的实例,每个实例都会有一些行,每个实例的变量不会重叠。

标签: linux bash variables unix gnu-parallel


【解决方案1】:

如果其他人想知道在 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

希望这可以帮助任何使用并行和变量的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2017-07-27
    相关资源
    最近更新 更多