2012-11-21 134 views
0

如果我使用shell groovy`:無法從命令`ps -eaf |獲得正確的輸出grep的使用Groovy

ps -eaf | grep groovy 

我能得到這樣的輸出:

[[email protected] www]# ps -eaf | grep groovy 
root  924 539 1 03:15 pts/0 00:00:05 /usr/java/jdk1.6.0_31/bin/java -classpath 
/root/dev/groovy-1.8.8/lib/groovy-1.8.8.jar -Dscript.name=./groovysh -Dprogram.name=groovysh 
-Dgroovy.starter.conf=/root/dev/groovy-1.8.8/conf/groovy-starter.conf 
-Dgroovy.home=/root/dev/groovy-1.8.8 -Dtools.jar=/usr/java/jdk1.6.0_31/lib/tools.jar 
org.codehaus.groovy.tools.GroovyStarter --main org.codehaus.groovy.tools.shell.Main 
--conf /root/dev/groovy-1.8.8/conf/groovy-starter.conf --classpath . 
root  1127 562 0 03:20 pts/1 00:00:00 grep groovy 
[[email protected] www]# 

但是,如果我運行常規命令:

proc = "ps -eaf | grep groovy".execute() 

proc.waitFor() // => return 1 

proc.in.text // => return "" 

proc.err.text // => see following 

proc.err.text將是ps命令的文檔:

ERROR: Garbage option. 

********* simple selection ********* ********* selection by list ********* 
-A all processes      -C by command name 
-N negate selection     -G by real group ID (supports names) 
-a all w/ tty except session leaders -U by real user ID (supports names) 
-d all except session leaders   -g by session OR by effective group name 
-e all processes      -p by process ID 
T all processes on this terminal  -s processes in the sessions given 

但是,如果我運行ps -eaf它將是正確的。

看來|不能使用,是真的嗎?如何解決它?

回答

2

是的,你不能使用shell輸出管道和重定向。

一種選擇是要做到:

Process ps = 'ps -eaf'.execute() 
Process gr = 'grep groovy'.execute() 

Process all = ps | gr 

println all.text 

另一種是使用的列表形式來包裝它在一個新的shell執行:

println([ 'sh', '-c', 'ps -eaf | grep groovy' ].execute().text)