Cómo ejecutar comandos del sistema (linux / bsd) usando Java

Estoy intentando ser barato y ejecutar un comando del sistema local ( uname -a ) en Java. Estoy buscando tomar el resultado de uname y almacenarlo en una cadena. Cual es la mejor manera de hacer esto? Código actual:

 public class lame { public static void main(String args[]) { try { Process p = Runtime.getRuntime().exec("uname -a"); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line=reader.readLine(); while (line != null) { System.out.println(line); line = reader.readLine(); } } catch(IOException e1) {} catch(InterruptedException e2) {} System.out.println("finished."); } } 

Tu camino no está muy lejos de lo que probablemente haría:

 Runtime r = Runtime.getRuntime(); Process p = r.exec("uname -a"); p.waitFor(); BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = ""; while ((line = b.readLine()) != null) { System.out.println(line); } b.close(); 

Maneje las excepciones que le interesan, por supuesto.

Esa es la mejor manera de hacerlo. También puede usar ProcessBuilder que tiene un constructor de argumento variable, por lo que podría guardar una línea o dos de código

Lo que estás haciendo se ve bien. Si su comando solo está devolviendo una sola cadena, no necesita el ciclo while, simplemente almacene el valor de reader.readLine () en una única variable String.

Además, probablemente deba hacer algo con esas excepciones, en lugar de simplemente tragárselos.

Sé que esto es muy viejo, pero aún así …

Leyendo el artículo aquí: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec—won-t.html
Tengo entendido que primero debe leer los flujos de salida y error de su comando ejecutado y solo waitFor el valor de retorno de su proceso.