我试图用gnu-parallel链接一些命令。这些命令涉及之前定义的环境变量。例如,考虑下面的命令,该命令接收*.c
个文件列表,发出从clang
到.bc
文件的llvm字节码,并使用{{1 }}。
.rbc
上面的程序工作正常,但是如果我通过环境变量更改opt
,则该命令将停止工作。
parallel --halt now,fail=1 'clang -Xclang -disable-O0-optnone -S -c -emit-llvm {} -o {.}.bc ; opt -S -mem2reg {.}.bc -o {.}.rbc ' ::: "${source_files[@]}"
答案 0 :(得分:1)
shell不会在单引号内扩展环境变量,而parallel也不会这样做(因此注释中的env_parallel建议)。
最简单的解决方案是在变量周围使用不同的引号:
parallel --halt now,fail=1 "$COMPILER"' -Xclang ... ' ::: "${source_files[@]}"
为了避免万一,我在命令的其余部分保留了单引号,但您可能不需要这样做。像这样背对背放置的引号会被shell自动连接成一个参数。