当命令涉及环境变量时 gnu-parallel 失败

gnu-parallel fails when command involves environment variables

我正在尝试使用 gnu-parallel 链接一些命令。这些命令涉及之前定义的环境变量。例如,考虑下面的命令,它接收 *.c 个文件的列表,将带有 clang 的 llvm 字节码发送到 .bc 文件并将其优化为 .rbc 带有 [=14] 的文件=].

parallel --halt now,fail=1 'clang -Xclang -disable-O0-optnone -S -c -emit-llvm {} -o {.}.bc ; opt -S -mem2reg {.}.bc -o {.}.rbc ' ::: "${source_files[@]}"

上面的程序工作得很好,但是如果我通过环境变量更改 clang,命令将停止工作。

parallel --halt now,fail=1 '$COMPILER -Xclang ... ' ::: "${source_files[@]}"

shell不会展开单引号内的环境变量,parallel也不会展开(因此env_parallel评论中的建议)。

此处最简单的解决方案是在变量周围使用不同的引号:

parallel --halt now,fail=1 "$COMPILER"' -Xclang ... ' ::: "${source_files[@]}"

为了以防万一,我在命令的其余部分留下了单引号,但您可能不需要。 shell.

像这样背靠背放置的引号会自动连接成一个参数