2010-11-12 13 views
9

Stworzyłem samodzielną aplikację, w której chcę, gdy użytkownik kliknie na przycisk Uruchom, wtedy terminal powinien się otworzyć, a konkretne polecenie powinno zostać wykonane na terminalu. Jestem w stanie otworzyć terminal powodzeniem stosując następujący kod ...wykonywanie poleceń na terminalu w Linuksie poprzez Javę

Process process = null; 
try { 
    process = new ProcessBuilder("xterm").start(); 
} catch (IOException ex) { 
    System.err.println(ex); 
} 

Powyższy kod otwiera okno terminala, ale nie jestem w stanie wykonać dowolne polecenie na nim. Czy ktoś może mi powiedzieć, jak to zrobić?

Odpowiedz

2

Załóżmy, że próbują swoją komendę gedit to trzeba podać pełną ścieżkę do gedit (np/usr/bin/gedit). Podobnie dla wszystkich innych poleceń określ pełną ścieżkę.

5

Spróbuj

new ProcessBuilder("xterm", "-e", 
        "/full/path/to/your/program").start() 
+0

faktycznie w terminal nie chcę uruchamiać określonego programu. Muszę wykonać konkretne polecenie. Na przykład $ gedit w terminalu. –

+0

Czy nie jest programem? – Kennet

+0

Przy okazji wypróbowałem twoje powyższe stwierdzenie dla wiedzy, ale to nie działa, nawet terminal się nie otwiera. –

4

wykonać dowolne polecenie w linux jak jest, jak co wpisać w terminalu:

import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 

    public class CommandExecutor { 
    public static String execute(String command){ 
     StringBuilder sb = new StringBuilder(); 
     String[] commands = new String[]{"/bin/sh","-c", command}; 
     try { 
      Process proc = new ProcessBuilder(commands).start(); 
      BufferedReader stdInput = new BufferedReader(new 
        InputStreamReader(proc.getInputStream())); 

      BufferedReader stdError = new BufferedReader(new 
        InputStreamReader(proc.getErrorStream())); 

      String s = null; 
      while ((s = stdInput.readLine()) != null) { 
       sb.append(s); 
       sb.append("\n"); 
      } 

      while ((s = stdError.readLine()) != null) { 
       sb.append(s); 
       sb.append("\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return sb.toString(); 
    } 

} 

Zastosowanie:

CommandExecutor.execute("ps ax | grep postgres"); 

lub jako kompleks jak:

CommandExecutor.execute("echo 'hello world' | openssl rsautl -encrypt -inkey public.pem -pubin | openssl enc -base64"); 

String command = "ssh [email protected] 'pg_dump -U postgres -w -h localhost db1 --schema-only'"; 
CommandExecutor.execute(command); 
Powiązane problemy