2016-10-21 60 views
0

我正在使用的ProcessBuilder在java程序shell腳本命令,以從shell腳本命令的輸出,這裏是我的代碼:從這個無法在java中

String lastLine = ""; 

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "echo $(ps -eo pid,args | grep -v grep | grep -v \"$$"\ | grep feature_service.sh | awk '{print $1}')"); 

BufferedReader reader = 
        new BufferedReader(new InputStreamReader(process.getInputStream())); 

String line; 
      while ((line = reader.readLine()) != null) { 
       lastLine = line; 
      } 

輸出:空字符串(「」)

但是,如果我在終端上運行相同的命令它工作正常(進程的PID)。

請幫幫我。

+0

這是編譯嗎?你在''$$''(而不是'\「$$ \」')中有一個字符串中有兩個未轉義的引號。 –

+0

我只在我的程序中使用這個\「$$ \」。 thnx我也會在這裏改變。 – vinni

回答

1

以下簡化的Shell命令正在工作。

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", 
    "-c", 
    "ps -eo pid,args|grep [f]eature_service.sh|awk '{print $1}'|tr '\\n' ' '"); 
  • ps -eo pid,args - 列出進程ID和參數
  • grep [f]eature_service.sh - grep的用於參數的串feature_service.sh,所述[f]避免在鏈
  • awk '{print $1}'grep的多個使用 - 打印輸出的第一列,使用默認空白字符作爲分隔符
  • tr '\n' ' ' - 用空格鍵替換輸出中的所有換行符呃
+0

命令在終端上工作,但如果通過java程序運行,則獲取null(來自bufferedReader)。 – vinni

+0

@vinni我相信你運行它不同。如果你在終端運行'/ bin/bash -c echo $(...)',它什麼都不返回。 – SubOptimal

+0

thnx或幫助,我使用pgrep -f feature_service.sh和它的工作正常。 – vinni