2012-03-20 43 views
5

mi problema es simple, cuando intento ejecutar script .sh desde Java, el script no se ejecuta. Si cambio mi script a un comando simple de Linux, como ls -all, funciona perfectamente, así que supongo que estoy usando un comando incorrecto en mi script, que detiene la ejecución. Por favor ayuda.Ejecutando script bash desde java

David código

Java:

String cmd = "bash /home/david/burza/getter.sh"; 

    try { 
     Process proc = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", cmd}); 
     BufferedReader read = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     try { 
      proc.waitFor(); 
     } catch (InterruptedException e) { 
      System.out.println(e.getMessage()); 
     } 
     while (read.ready()) { 
      System.out.println(read.readLine()); 
     } 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 

script de Bash:

#! /bin/bash 

wget -O data1.html http://www.rmsystem.cz/kurzy-online/akcie/easyclick; 
touch ext_data.txt; 

grep 'table class="tbl1"' ./data1.html | tr '<td>' ' ' | tr '-' 'A' | grep -o -w '[0-9, ]*' | sed 's/ *//g' | sed '/^$/d' | tr ',' '.' > ext_data.txt; 

lines=`wc -l ext_data.txt | grep -o '[0-9]*'`; 

(echo $lines; cat ext_data.txt) > ext_data.txt.new && mv ext_data.txt.new ext_data.txt; 
+0

¿Seguro de su script se establece como ejecutable? tal vez chmod + x script.sh podría ayudar – Kiwy

+0

¿Qué esperas obtener? Su script de shell no imprime nada en stdout, redirige todo el resultado a los archivos. ¿Para qué sirve BufferedReader? – zserge

+0

este es un código estúpido, escribe 3 hilos para flujos de entrada, salida y error y lo haces interactivamente, esto te salvará de todo tipo de problemas –

Respuesta

2

de inicio mediante la eliminación de la 'fiesta' desde el inicio del comando.

En segundo lugar, no estoy seguro de que el caparazón haga #! interpretación cuando no se usa de forma interactiva. Me gustaría saltar directamente a/bin/bash para la llamada Runtime.exec().

Por último, simplemente tener un lector presente en la stdout no será suficiente. Necesita leer activamente desde él y desde stderr para evitar que el proceso se cuelgue si escribe demasiado. Para aclarar, está esperando a que se complete el proceso (proc.waitFor()) antes de tratar con cualquiera de los resultados. Si el proceso escribe demasiada salida antes de salir, bloqueará la espera de que vacíe el búfer mientras está bloqueado esperando a que salga.

Leer las 4 páginas de este artículo: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1

+0

Muchas gracias por tus consejos, logré ponerlo en ejecución usando http: // www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1 muchas gracias. – dawe134

Cuestiones relacionadas