当命令涉及环境变量时 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.
像这样背靠背放置的引号会自动连接成一个参数
我正在尝试使用 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.
像这样背靠背放置的引号会自动连接成一个参数