Java - Ejecutar comando linux desde JAVA

 
Vista:

Ejecutar comando linux desde JAVA

Publicado por Eduardo (19 intervenciones) el 15/06/2007 20:23:46
QUE TAL: NECESITO EJECUTAR EL SIGUIENTE COMANDO LINUX DESDE JAVA :

bzip2 -dc *.tar.bz2 | tar -x

ESE COMANDO SI LO EJECUTO DESDE LA LINEA DE COMANDOS DE LINUX ANDA BIEN. CUANDO LO METO EN JAVA NO CORRE.

lo estoy poniendo de la siguiente forma :

Runtime.getRuntime().exec ("bzip2 -dc *.tar.bz2 | tar -x")

Meti todo el comando en un string y puse
Runtime.getRuntime().exec (string ) y lo mismmo

Lo mismo me pasa si quiero borrar por ejemplo todos los *.txt

si pongo desde linea de comando rm *.txt borra todo pero si pongo desde java no hace nada.

Runtime runtime = Runtime.getRuntime();
Process proceso = runtime.exec( "rm *.txt");

Como se resuelve esto ?

Lo puedo resolver con un bash, pero quiero que java ejecute todo.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ejecutar comando linux desde JAVA

Publicado por Eduardo (19 intervenciones) el 20/06/2007 14:17:25
Lo resolvi de la siguiente forma viendo un programa de otro foro:
Si bien no entiendo todo lo que hace despues, pongo por un lado como anda y por otro todo el resto de los comandos que ejecuta ese programita para ver que hace.

CON ESTO ANDA IMPECABLE !! EN LUGAR DE PONER bash -c HAY QUE PONER SOLO SH !!

String[] command = {"sh","-c","rm *.txt"};
final Process process = Runtime.getRuntime().exec(command);

DE ACA FUE DONDE SAQUE SOLO ESE CODIGO, PERO NO ENTIENDO BIEN QUE HACE.

import java.io.*;

public class carota
{
public static void main(String[] args)
{
try
{
String[] command = {"sh","-c","bzip2 -dc *.tar.bz2 | tar -x"};
final Process process = Runtime.getRuntime().exec(command);
new Thread()
{
public void run()
{
try{
InputStream is = process.getInputStream();
byte[] buffer = new byte[1024];
for(int count = 0; (count = is.read(buffer)) >= 0;)
{
System.out.write(buffer, 0, count);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();
new Thread()
{
public void run()
{
try{
InputStream is = process.getErrorStream();
byte[] buffer = new byte[1024];
for(int count = 0; (count = is.read(buffer)) >= 0;)
{
System.err.write(buffer, 0, count);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();

int returnCode = process.waitFor();
System.out.println("Return code = " + returnCode);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar