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

3

这个 curl 命令在终端中可以运行,但在 Groovy 中失败了。我添加了来自另一个问题的 err 和 out 输出,以尝试理解它为什么失败。

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'获取更多信息"。

使用 sh -c 时,我遇到了完全相同的错误。只需将其删除并在 curl 后添加空格即可。 - daggett
在终端中,没有在 curl 后面加上空格的命令几乎肯定不会起作用。 - tripleee
1个回答

6

不要使用字符串来执行命令,因为Groovy会根据空格进行分割。您必须将“shell命令”作为sh -c单个参数传递。所以现在您缺少curl和url之间的空格,并且这将变成两个参数(您不能对其进行引用)。

改为使用字符串列表:

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

另外一件事:如果你只需要获取一个URL的内容而不需要复杂的功能(如超时、认证等),你也可以这样做:

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

这让我疯狂了。谢谢! - mellow-yellow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接