使用Groovy及其
java.lang.Process支持,如何将多个shell命令一起管道?
考虑这个bash命令(假设你的用户名是foo):
ps aux | grep ' foo' | awk '{print $1}'
使用Groovy,ProcessGroovyMethods文档和代码说我应该能够做到这一点来实现相同的结果:
def p = "ps aux".execute() | "grep ' foo'".execute() | "awk '{print $1}'".execute() p.waitFor() println p.text
但是,我无法获得除此之外的任何文本输出:
def p = "ps aux".execute() p.waitFor() println p.text
一旦我开始配管,println就不会打印出任何东西.
思考?
这对我有用:
原文链接:https://www.f2er.com/bash/385218.htmldef p = 'ps aux'.execute() | 'grep foo'.execute() | ['awk','{ print $1 }'].execute() p.waitFor() println p.text
由于一个未知的原因,awk的参数不能只用一个字符串发送(我不知道为什么!也许bash引用不同的东西).如果使用命令转储错误流,则会看到相对于awk脚本编译的错误.
编辑:事实上,
>“ – string – ”.execute()委托给Runtime.getRuntime().exec(-string-)>使用’或’处理包含空格的参数是bash的工作.Runtime.exec或操作系统不知道引号>执行“grep’foo’”.execute()执行命令grep,其中’作为第一个参数,foo’作为第二个参数:它无效.同样的awk