用于执行带有进程输出的unix命令的groovy语法

时间:2014-12-03 16:57:34

标签: shell groovy

我正在尝试在groovy中执行shell命令。命令为diff <(ls dir1) <(ls dir2)。从shell开始,这很好,但是当我在groovy中"diff <(ls dir1) <(ls dir2)".execute()时,我收到一个shell错误,说diff: extra operand。我似乎无法在groovy中找出正确的语法。有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:2)

如果您可以像在命令行上那样通过bash调用此方法,那么shell调用的语法是:

def p = ["/bin/bash", "-c", "diff <(ls dir1) <(ls dir2)"].execute()
p.waitFor()
println p.text

您不能简单地运行上面代码的原因:execute()只执行一个简单的流程。所以你只能运行命令并传递参数。所以例如'diff file1 file1'.execute()会奏效。但是<(...)是bash-代表“创建一个命名管道”。但是你可以使用-c param向任何(?)shell传递一个“命令”来执行它,这样你就可以利用shell的强大功能。在我的例子中将它作为一个字符串数组调用,可以通过引用/转义所有内容来保存你的hastle。