В настоящее время я тестирую GNU параллельно, чтобы распределить команду сравнения по нескольким серверам, используя bash. В своей основной функции эта команда сравнения принимает два входа для сравнения (доступ к базе данных Oracle) и требует имя выходного файла через -o. Программа требует как минимум одно действие загрузки, сохранения или прямой загрузки.
compare -o cmp.input1.input2.dat Input1 Input2
У меня есть несколько тысяч этих входных пар и я создаю файл со всеми комбинациями, чтобы каждая строка содержала имя выходного файла и идентификаторы базы данных, требуемые программой.
#test_parallel
-o cmp.input1.input2.dat Input1 Input2
-o cmp.input1.input3.dat Input1 Input3
-o cmp.input2.input3.dat Input2 Input3
[...]
и выполнить команду с использованием параллельного интерфейса, однако выполнить команду сравнения не удалось
parallel -a test_parallel "compare {}"
ERROR: No action specified for results (load, save or direct upload)
usage: compare [-u][-o <file>] query target
используя режим --dryrun
вот что параллельно выполняет:
compare -o\ cmp.input1.input2.dat\ Input1\ Input2
По какой-то причине я не понимаю, пробел не обрабатывается корректно программой сравнения. Выполнение этой команды в bash приводит к точно так же сообщению об ошибке. Удаление экранирования после флага -o (я мог бы переместить -o в параллельную команду) приводит к ошибке "слишком много аргументов". Удаление всех escape-кодов запускает команду, как и ожидалось.
Можно ли сказать параллель не печатать escape при вызове команды? Я не вижу ничего в документации, кроме того, что это ожидаемое поведение по умолчанию, как указано в parallel --shellquote