una ejecutar desde consola como comandos comando bat aplicacion abrir java bash unix exit-code runtime.exec

ejecutar - ¿Cómo obtengo el código de salida del comando bash desde una ejecución de proceso desde Java?



el comando java (1)

Tengo un programa que es:

import java.io.*; import java.util.*; public class ExecBashCommand { public static void main(String args[]) throws IOException { if (args.length <= 0) { System.err.println("Need command to run"); System.exit(-1); } Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("./nv0914 < nv0914.challenge"); Process process1 = runtime.exec("echo ${?}"); InputStream is = process1.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; //System.out.printf("Output of running %s is:", Arrays.toString(args)); while ((line = br.readLine()) != null) { System.out.println(line); } } }

Nota: nv0914 es un archivo ejecutable de bash y nv0914.challenge es un archivo de texto. Cuando ejecuto cualquier comando normal en el terminal y justo después de eso si verifico el código de salida usando echo ${?} . Ahora quiero hacer lo mismo usando un programa, pero el programa simplemente está dando el resultado ${?} . ¡Por favor, ayúdame!


Process.waitFor () devuelve un int Ahí es donde se devuelve el código de salida. Si comienza un programa no relacionado, no tendrá un código de salida anterior, por lo que no devuelve nada útil.

No puede usar exitValue () de manera confiable porque podría llamarlo antes de que el programa haya finalizado. Solo debe llamarlo después de llamar a waitFor () (y le dará el mismo código de salida waitFor ())

Desde el Javadoc para exitValue

Lanza: IllegalThreadStateException: si el subproceso representado por este objeto de proceso aún no ha finalizado.