2012-09-04 20 views
11

Me gustaría ejecutar dos o más comandos secuencialmente a través de mi aplicación Java usando la clase ProcessBuilder. He probado varias opciones como se sugirió en otras respuestas/foros, pero no tuve suerte.Java ProcessBuilder para comenzar a ejecutar múltiples comandos secuencialmente en Linux

Estas son las cosas que he intentado:

ProcessBuilder processBuilder = new ProcessBuilder("ls", ";", "pwd"); 

me da error siguiente:

Errores: LS:;: No existe el archivo o directorio Errores: LS: pwd: No existe el fichero o directorio

ProcessBuilder processBuilder = new ProcessBuilder("ls", "&&", "pwd"); 

me da error similar:

Er Rors: ls: & &: No existe el archivo o directorio Errores: LS: pwd: No existe el archivo o directorio

List<String> command = new ArrayList<String>(); 
    command.add("ls"); 
    command.add(";"); 
    command.add("pwd"); 
    ProcessBuilder processBuilder = new ProcessBuilder(command); 

me da error siguiente:

Errores: LS:;: No existe el fichero o directorio Errores: ls: pwd: Ningún archivo o directorio

Mi sistema operativo es Linux/Mac-OSX.

Respuesta

19

Sus enfoques son equivalentes a llamar al ls con los argumentos especificados. En la notación Bash, lo que se está ejecutando es:

ls ';' pwd 
ls '&&' pwd 

Si desea ls y pwd a ejecutar como comandos separados, puede utilizar Bash (u otro idioma shell) para envolverlos en un solo comando:

bash -c 'ls ; pwd' 

que se puede llamar de esta manera:

ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "ls ; pwd"); 
+0

Muchas gracias, funcionó como se esperaba –

+0

@NarinderKumar: ¡De nada! – ruakh

+0

@ruakh ¿Puede decirme cómo puedo hacer esto envolviendo con PsExec.exe basado en Windows. Como ejemplo, vaya a la unidad "C" y cree un directorio llamado "abc" ex: new ProcessBuilder ("psexec", "-c", "cd c: \; mkdir abc") ;. Muchas gracias. – Channa

Cuestiones relacionadas