Почему эта команда curl не выполняется при выполнении в groovy? - PullRequest
0 голосов
/ 21 июня 2019

Эта команда curl работает в терминале, но не работает в Groovy.Я добавил ошибку и вышел из другого вопроса, чтобы попытаться понять, почему это не удается.

def initialSize = 4096
def out = new ByteArrayOutputStream(initialSize)
def err = new ByteArrayOutputStream(initialSize)
def process = "sh -c curl'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts'".execute()
process.consumeProcessOutput(out, err)
process.waitFor()
println process.text
println err.toString()
println out.toString()

Вывод «curl: попробуйте 'curl --help' или 'curl --manual' для получения дополнительной информации"

1 Ответ

3 голосов
/ 22 июня 2019

Не используйте строку для выполнения, так как Groovy будет разбиваться на пробелы. Вы должны передать «команду оболочки» как single аргумент sh -c. Так что прямо сейчас у вас а) не хватает пробела между curl и URL-адресом и б) это закончится как два аргумента (и вы не можете цитировать для этого).

Вместо этого используйте список строк:

['sh', '-c', "curl 'http://...'"].execute()

Также о sidenote: если вы просто хотите получить содержимое URL-адреса и не нуждаетесь в причудливых вещах (тайм-ауты, аутентификация, ...), вы также можете сделать:

"https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts".toURL().text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...