2010-11-12 12 views
9

He creado una aplicación independiente en la que quiero que cuando el usuario haga clic en el botón de ejecución, el terminal se abra y se ejecute un comando en particular en el terminal. Soy capaz de abrir el terminal con éxito utilizando el siguiente código ...ejecutando comandos en el terminal en Linux a través de java

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

El código anterior se abre una ventana de terminal, pero no soy capaz de ejecutar cualquier comando en él. ¿Puede alguien decirme cómo hacer eso?

Respuesta

2

Supongamos que está intentando su comando gedit entonces usted necesita para proporcionar la ruta completa cualificado para gedit (por ejemplo/usr/bin/gedit). De manera similar para todos los demás comandos, especifique la ruta completa.

5

Trate

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

En realidad, en el terminal no quiero ejecutar un programa específico. Necesito ejecutar un comando en particular. Por ejemplo, $ gedit en la terminal. –

+0

¿No es gedit un programa? – Kennet

+0

Por cierto, probé la afirmación dada anteriormente por conocimiento, pero no funciona, ni siquiera la terminal se está abriendo. –

4

ejecutar cualquier comando en linux como es, como lo que se escribe en el terminal:

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(); 
    } 

} 

Uso:

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

o tan complejo como:

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

String command = "ssh user[email protected] 'pg_dump -U postgres -w -h localhost db1 --schema-only'"; 
CommandExecutor.execute(command); 
Cuestiones relacionadas