GNU-параллельный сбой, когда команда включает переменные среды - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь связать несколько команд с помощью GNU-параллели. Эти команды включают переменные среды, определенные ранее. Например, рассмотрим приведенную ниже команду, которая получает список файлов *.c, создает байт-код llvm с файлами clang до .bc и оптимизирует его в файлы .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[@]}"

Программа выше работает просто отлично, но если я изменю clang на переменную окружения, команда перестанет работать.

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

1 Ответ

0 голосов
/ 15 ноября 2018

Оболочка не раскрывает переменные окружения внутри одинарных кавычек, и параллель также не делает этого (отсюда и предложение env_parallel в комментариях).

Самое простое решение здесь - использовать разные кавычки вокруг переменной:

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

Я оставил одинарные кавычки вокруг остальной части команды, на всякий случай, но вам может и не понадобиться. Кавычки, помещенные друг за другом, автоматически объединяются в один аргумент оболочкой.

...