为什么我的groovy脚本在执行这个shell命令时会中断

为什么我的groovy脚本在执行这个shell命令时会中断,groovy,Groovy,我试图使用Groovy运行shell命令,但它引发了一个异常。当我直接在命令行中运行它时,它就工作了 String command = "git log --date=local --after=\"2 weeks ago\" --pretty=format:\"%H\" | sed -n '\$p'" def proc = command.execute() proc.waitFor() println "Process exit code: ${proc.exitValue()}" prin

我试图使用Groovy运行shell命令,但它引发了一个异常。当我直接在命令行中运行它时,它就工作了

String command = "git log --date=local --after=\"2 weeks ago\" --pretty=format:\"%H\" | sed -n '\$p'"
def proc = command.execute()
proc.waitFor()
println "Process exit code: ${proc.exitValue()}"
println "Std Err: ${proc.err.text}"
println "Std Out: ${proc.in.text}"
错误消息是

Process exit code: 128
Std Err: fatal: ambiguous argument 'weeks': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
进程退出代码:128
Std Err:致命:参数“weeks”不明确:未知修订或路径不在工作树中。
使用“---”将路径与修订分开,如下所示:
'吉特[…]-[…]'

双引号和平面字符串中的管道不像shell那样由Java运行时(Groovy委托给它)解析。Java仅通过在空格周围标记来拆分字符串,并直接传递这些参数

您需要将该字符串传递给shell进程,如下所示:

String command = "git log --date=local --after=\"2 weeks ago\" --pretty=format:\"%H\" | sed -n '\$p'"
def proc = [ 'sh', '-c', command ].execute()