Я пытаюсь запустить команду find внутри Jenkins (https://jenkins-ci.org), которая позволяет запускать groovy-скрипты из веб-интерфейса."find: missing argument to -exec", запущенный в Java-процессе builder
Мой код:
ProcessBuilder pb = new ProcessBuilder();
pb.directory(new File("/var/lib/jenkins/jobs/myJob");
pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
command = 'find . -name build.xml -exec echo \"{}\" \\;'
println(command)
pb.command(command.split(" "));
pb.start().waitFor();
Веб-интерфейс будет отображать результат Println:
find . -name build.xml -exec echo "{}" \;
В то время как Дженкинс журнал (/var/log/jenkins/jenkins.log) регистрирует следующее сообщение об ошибке:
find: missing argument to `-exec'
Однако, если я бегу, что та же команда, выводимый в веб-интерфейсе (find . -name build.xml -exec echo "{}" \;
) через ш Я не получаю такой ошибки.
Кроме того, если я заменяю \;
witih +
, команда работает!
Так что-то нечисто с ProcessBuilder и \\;
передается в качестве аргумента командной строки
, всегда лучше использовать 'List' как аргумент для команды. Я имею в виду делать какие-либо расщепления - особенно если аргументы времени исполнения могут быть переданы. Однако +1. – Opal
да, я тоже не люблю раскол. он работает только здесь, потому что в аргументах нет пробелов. – cfrick
уверен. Было бы неплохо указать на это. – Opal