2014-12-03 40 views
1

我想执行groovy shell命令。该命令是diff <(ls dir1) <(ls dir2)。从shell中,这工作正常,但当我在groovy "diff <(ls dir1) <(ls dir2)".execute(),我得到一个壳错误说diff: extra operand。我似乎无法在常规中找出正确的语法。有人能指出我做错了什么吗?groovy语法执行unix命令与进程输出

回答

2

如果你可以通过bash调用这个就像你在命令行做的活,那么语法与外壳调用是:

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

你不能简单地运行上面的代码的原因:​​不只是一个简单的流程执行。所以你只能运行命令并传递参数。所以例如'diff file1 file1'.execute()将工作。但<(...)是bash-说“创建一个命名管道”。但是你可以通过-c参数传递给任何(?)shell一个“命令”来执行它,所以你可以利用shell的能力。在我的示例中将它作为一个字符串数组调用可以节省您的引用/正确转义所有内容的窍门。

+0

谢谢,我会尝试解决方法。但我真的想弄清楚为什么它不起作用。 – 2014-12-03 17:23:34

+0

@JeffStorey我已经添加了一些解释。基本上它就像'''或其他“壳体”。普通的unix执行不能理解这个 - 只有'cmd param1 ... paramN' – cfrick 2014-12-03 17:29:34

+0

明白了,谢谢你的解释 – 2014-12-03 17:29:54