如何将变量传递给并行命令

How to pass variables to parallel command

如何将不同的值传递给单个 parallel 命令:

我试过这个:

parallel ::: 'X="aa"' 'X="bb"' ::: echo ${X}

只打印两个空行,就好像 X 的值没有设置一样。 我用 echo $X 试过,结果相同。

我希望它能打印出来

aa
bb

好像我有 运行 顺序:

echo "aa"
echo "bb"

不完全清楚你想要什么运行。

你显然不想:

X="aa" echo ${X}
X="bb" echo ${X}

因为那没有输出。

你想要:

X="aa"; echo ${X}
X="bb"; echo ${X}

在这种情况下,您可以执行以下操作之一:

parallel ::: 'X="aa";' 'X="bb";' ::: 'echo ${X}'
parallel {1}\;{2} ::: 'X="aa"' 'X="bb"' ::: 'echo ${X}'
parallel '{}; echo ${X}' ::: 'X="aa"' 'X="bb"'

但是,GNU Parallel 的方法是使用 GNU Parallel 替换字符串而不是 $X:

parallel echo {} ::: aa bb

所以如果你想 运行:

CXX="c++"; ID="c++"; cd ${ID}; ${CXX} main.cpp
CXX="/local/bin/nvcc"; ID="nvcc"; cd ${ID}; ${CXX} main.cpp

你会使用 :::+ :

parallel 'cd {2}; {1} main.cpp' ::: c++ /local/bin/nvcc :::+ c++ nvcc

此外:--dry-run 是您的朋友,因为它会向您展示 运行,这通常有助于理解效果。

如果您是 GNU Parallel 的新手并且喜欢看书,请在 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html or download it at: https://doi.org/10.5281/zenodo.1146014

购买 GNU Parallel 2018

至少阅读第 1+2 章。应该不会超过 20 分钟。