Аргументы командной строки Apache Ant без двойных кавычек - возможно ли это?
-
05-07-2019 - |
Вопрос
Сегодня мне нужно было добавить задачу в файл Apache Ant. Командная строка должна была выглядеть примерно так
myprogram --param1 --param2 path\somefile 2> path\logfile
Проблема с этим заключалась в том, что если бы я использовал что-то вроде следующего для этого
<exec executable="$(myprogram)"
<arg value="--param1">
<arg value="--param2">
<arg path="$(somefile)">
<arg value="2>">
<arg path="$(logfile)">
</exec>
все аргументы были указаны, поэтому команда выглядела так:
myprogram "--param1" "--param2" "path\somefile" "2>" "path\logfile"
, что неплохо и особенно приятно, если в вашем файле / пути есть пробелы, но он уничтожает канал к файлу журнала (вместо этого программа считает, что есть два дополнительных файловых аргумента " 2 > " и " путь \ logfile ").
Я решил эту проблему, вызвав вместо этого пакетный сценарий, который требует только файлы в качестве параметров, но я удивился: возможно ли это сделать без такого обходного пути?
Решение
Когда вы запускаете " myprogram --param1 --param2 path \ somefile 2 > путь \ logfile " ;, аргументы вашей программы заканчиваются на " 2 > " ;. Перенаправление файлов - это операция вашей оболочки, которая не используется изнутри муравья. Если вы посмотрите документы по задаче ant exec , вы увидите что он поддерживает перенаправление через атрибут output .
Другие советы
Вы пробовали <arg line="..." />
?
Задача ant exec имеет выходной параметр, в котором вы можете указать файл журнала, не требуя конвейера командной строки, в сочетании с параметром append для определения необходимости перезаписи или добавления выходного файла.
У меня была такая же проблема, как и у стартера темы. В командной строке выполнения java мне нужно было добавлять исходные файлы как отдельные аргументы, а не как один аргумент с кавычками вокруг них.
Я использовал тег <arg value="..." />
, но использование <arg line="..." />
, как предлагал nullptr, решило мою проблему.