1
我想执行groovy shell命令。该命令是diff <(ls dir1) <(ls dir2)
。从shell中,这工作正常,但当我在groovy "diff <(ls dir1) <(ls dir2)".execute()
,我得到一个壳错误说diff: extra operand
。我似乎无法在常规中找出正确的语法。有人能指出我做错了什么吗?groovy语法执行unix命令与进程输出
我想执行groovy shell命令。该命令是diff <(ls dir1) <(ls dir2)
。从shell中,这工作正常,但当我在groovy "diff <(ls dir1) <(ls dir2)".execute()
,我得到一个壳错误说diff: extra operand
。我似乎无法在常规中找出正确的语法。有人能指出我做错了什么吗?groovy语法执行unix命令与进程输出
如果你可以通过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的能力。在我的示例中将它作为一个字符串数组调用可以节省您的引用/正确转义所有内容的窍门。
谢谢,我会尝试解决方法。但我真的想弄清楚为什么它不起作用。 – 2014-12-03 17:23:34
@JeffStorey我已经添加了一些解释。基本上它就像'''或其他“壳体”。普通的unix执行不能理解这个 - 只有'cmd param1 ... paramN' – cfrick 2014-12-03 17:29:34
明白了,谢谢你的解释 – 2014-12-03 17:29:54