Я исследовал проблему и думаю, что проблема в том, что я вызываю bash из переменной.
На Stackexchange есть несколько отличных ресурсов, включая очень похожие вопросы.
Наиболее близким совпадением будет этот вопрос.
Существует FAQ, который пытается помочь.
Я пытаюсь вызвать команду оболочки из скрипта groovy.
Вот рабочий минимальный пример:
def working()
{
printf "start\n"
def cmd = "sh -c 'ls'"
def proc = cmd.execute()
proc.waitFor()
if (proc.exitValue() > 1)
{
printf cmd + "\nexitcode:" + proc.exitValue().toString() + "\n"
println "[ERROR] ${proc.getErrorStream()}"
}
printf "end\n"
}
Вот код, который вызывает у меня головную боль
def notworking()
{
printf "start\n"
def cmd = "sh -c 'command -v ls'"
def proc = cmd.execute()
proc.waitFor()
if (proc.exitValue() > 1)
{
printf cmd + "\nexitcode:" + proc.exitValue().toString() + "\n"
println "[ERROR] ${proc.getErrorStream()}"
}
printf "end\n"
}
Мне нужно использовать sh
, чтобы вызвать command
.
Мой вывод ошибки:
sh -c 'command -v ls'
exitcode:2
[ERROR] -v: 1: -v: Syntax error: Unterminated quoted string
Я почти уверен, что это связано с тем, как аргументы на самом деле разделены. Я не могу применить ни один из советов по массиву из других вопросов/ответов.
Проделав должную осмотрительность в исследовании этого, я уверен, что это не дубликат. Это также актуально в широком смысле, поскольку может быть полезно всем, кто использует jenkins и разрабатывает groovy-скрипты.
command
— это одна из встроенных команд, поэтому мне нужно выполнитьsh
, чтобы она правильно интерпретировалась. - person Johannes   schedule 01.08.2019