Groovy进程不能使用linux shell(grep和awk和ps)

Process proc1 ='sh -c ps -ef'.execute(); Process proc2 ='sh -c grep sleep.sh '.execute(); Process proc3 ='sh -c grep -v grep '.execute(); Process proc4 ='sh -c awk sleep.sh '.execute(); Process all = proc1 | proc2 | proc3 | proc4; // I tried this too and this didnt work //println( [ 'sh', '-c', 'ps -ef | grep "sleep.sh" | grep -v "grep" | awk "sleep.groovy" ' ].execute().text ) //also tried without the awk println all.text; 

好吧,所以我想要做的是ps我的shell脚本(sleep.sh)[它只是睡了一段时间]。 不太确定如何做到这一点。 这是我最好的猜测^^

结果:

 -sh-3.2$ ./callGroovy.sh testSleep.groovy -sh-3.2$ 

不打印任何东西,并没有给我任何东西(callGroovy是一个shell脚本,我用它来调用我的groovy脚本)如果我运行pipe道命令,他们仍然工作,除了awk我想我正在做awk错误的inheritance人,其余的pipe道

 -sh-3.2$ ps -ef | grep "sleep.sh" | grep -v "grep" wasadmin ***** ***** 0 **:** pts/1 **:**:** /bin/bash ./sleep.sh 

(所有*都是数字)

当我尝试只用grep和ps的脚本它不给我这个输出。 有什么build议么? ..PS我也尝试过和没有在groovy脚本中的引号。 没想到这会有所作为,但值得一试

shell -c选项只需要一个参数。 尝试从命令行,你会看到它也失败了:

 sh -c ps -ef | sh -c grep sleep.sh | sh -c grep -v grep | sh -c awk sleep.sh 

它需要引号才能正常工作:

 sh -c "ps -ef" | sh -c "grep sleep.sh" | sh -c "grep -v grep" | sh -c "awk sleep.sh" 

您可以通过以字符串列表而不是字符串开头的方式正确引用命令: proc1 = ['sh', '-c', 'ps -ef'] 。 在这种情况下,你正在做groovy中的过滤,所以简单的解决方案是不通过shell调用命令。 尝试这个:

 Process proc1 ='ps -ef'.execute() Process proc2 ='grep sleep.sh '.execute() Process proc3 ='grep -v grep '.execute() Process proc4 ='awk sleep.sh '.execute() Process all = proc1 | proc2 | proc3 | proc4 println all.text 

最后,如果事情不能正常工作,读取stderr流可能会有帮助

 println all.err.text