为什么在groovy中执行此curl命令时失败?

为什么在groovy中执行此curl命令时失败?,curl,groovy,Curl,Groovy,此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/hos

此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:try'curl--help'或'curl--manual'以获取更多信息”

不要将字符串用于执行,因为Groovy将在空白处拆分。您必须将“shell命令”作为单个参数传递给
sh-c
。所以现在你a)在
curl
和url之间缺少一个空格,b)这将作为两个参数结束(你不能引用)

请改用字符串列表:

['sh', '-c', "curl 'http://...'"].execute()
还有一个附带说明:如果您只需要url的内容,而不需要花哨的东西(超时、身份验证等等),那么您也可以这样做:

"https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts".toURL().text

对于
sh-c
我有完全相同的错误。只需删除它并在curl后面加空格即可。几乎可以肯定,在
curl
后面没有空格的命令在终端中也不起作用。