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

时间:2018-01-24 21:53:37

标签: 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()}"
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>...]'

1 个答案:

答案 0 :(得分:2)

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

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

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