【问题标题】:gnu-parallel fails when command involves environment variables当命令涉及环境变量时,gnu-parallel 失败
【发布时间】:2019-04-12 01:09:34
【问题描述】:

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

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[@]}"

【问题讨论】:

  • 改用env_parallel

标签: gnu-parallel


【解决方案1】:

shell 不会在单引号内扩展环境变量,parallel 也不会这样做(因此 cmets 中的 env_parallel 建议)。

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

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

我在命令的其余部分留下了单引号,以防万一,但您可能不需要。像这样背靠背放置的引号会被 shell 自动连接成一个参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多