2016-10-21 1 views
0

Ich bin ein Shell-Skript-Befehl in Java-Programm läuft Process verwenden, hier ist mein Code:Unable Ausgabe von Shell-Skript-Befehl erhalten in 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; 
      } 

Ausgabe dieses: leere Zeichenfolge ("")

Aber wenn ich den gleichen Befehl am Terminal ausführen, funktioniert es gut (PID des Prozesses).

Bitte helfen Sie mir.

+0

Kompiliert dies? Sie haben zwei unausgezeichnete Anführungszeichen in einem String, in '" $$ "' (anstelle von '\" $$ \ "'). –

+0

ich benutze diese \ "$$ \" nur in meinem Programm. Ich werde mich auch hier ändern. – vinni

Antwort

1

Nach dem vereinfachten Shell-Befehl funktioniert.

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 - Liste der Prozess-ID und die Argumente
  • grep [f]eature_service.sh - grep für die Zeichenfolge feature_service.sh in den Argumenten, vermeiden die [f] die Mehrfachverwendung von grep in der Kette
  • awk '{print $1}' - drucken die erste Spalte der Ausgabe, Standard-Leerzeichen als Trennzeichen verwenden
  • tr '\n' ' ' - ersetzen Sie alle Zeilenumbruchzeichen in der Ausgabe durch ein Leerzeichen er
+0

Befehl arbeitet am Terminal, aber NULL (von bufferedReader) erhalten, wenn durch Java-Programm ausgeführt wird. – vinni

+0

@vinni Ich glaube, Sie laufen anders. Wenn Sie '/ bin/bash -c echo $ (...)' im Terminal ausführen, gibt es nichts zurück. – SubOptimal

+0

thnx oder help, ich benutze pgrep -f feature_service.sh und es funktioniert gut. – vinni