Я пытаюсь запустить команду find внутри консоли сценария Jenkins (https://jenkins-ci.org), которая позволяет запускать groovy-скрипты из веб-интерфейса.
Мой код:
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 "{}" \;
В то время как журнал jenkins (/var/log/jenkins/jenkins.log) регистрирует следующую ошибку:
find: missing argument to `-exec'
Однако, если я запускаю ту же команду, выведенную в веб-интерфейсе (find . -name build.xml -exec echo "{}" \;
), через оболочку, я не получаю такой ошибки.
Кроме того, если я заменю \;
на +
, команда сработает!
Так что что-то не так с processBuilder и \\;
, передаваемым в качестве аргумента командной строки.