2014-03-02 155 views
2

如何用groovy執行長命令? 當我在我的linux終端上執行這個命令時,我得到了我想要的進程的正確進程ID。使用groovy我得到一個空回報。這是我已經嘗試過:用linux shell的groovy執行long命令?

def p = "ps aux | grep 'unit 1' | grep -v grep | awk '{print $2}'".execute() 
p.waitFor() 
println p.text // this is empty, but it shouldn't 

應該如何正確執行,使用Groovy是什麼樣子?如何在groovy中獲得正確的進程ID?

+0

可能的[複製](HTTP://計算器。 COM /問題/ 16741065/Groovy的過程 - 不工作與 - Linux的殼的grep和 - AWK-和-PS?RQ = 1)。 – dmahapatro

+0

另外http://stackoverflow.com/questions/6008691/execute-unix-cat-command-in-groovy –

+0

這不是重複的,因爲它包含帶引號的空格的參數。這與在stackoverflow上其他問題有所不同。我已經從其他問題中解決了問題,但沒有成功。 – whitenexx

回答

2

它有點的註釋中的2個問題,(加上一些其他我不能在此刻找到)中的重複,但嘗試:

def cmd = /ps aux | grep 'unit 1' | grep -v grep | awk '{print $2}'/ 
def out = [ '/bin/sh', '-c', cmd ].execute().text.trim() 
println out 
+0

謝謝蒂姆!我使用你的代碼和「pgrep -f」。你的代碼也直接工作。 – whitenexx

+0

[這是我想到的另一個問題](http://stackoverflow.com/questions/16823666/getting-the-process-id-of-another-program-in-groovy-using-command-slinging/16858871 )顯示瞭如何使用Process管道 –