Java ProcessBuilder to start execute multiple commands sequentially in Linux

Narinder Kumar picture Narinder Kumar · Sep 4, 2012 · Viewed 29.7k times · Source

I would like to execute 2 or more commands sequentially through my Java Application using ProcessBuilder class. I Have tried multiple options as suggested in other responses/forums but no luck.

Here are the things I have tried:

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

Gives me following error :

Errors : ls: ;: No such file or directory Errors : ls: pwd: No such file or directory

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

Gives me similar error:

Errors : ls: &&: No such file or directory Errors : ls: pwd: No such file or directory

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

Gives me following error:

Errors : ls: ;: No such file or directory Errors : ls: pwd: No such file or directory

My OS is Linux/Mac-OSX.

Answer

ruakh picture ruakh · Sep 4, 2012

Your approaches are equivalent to calling ls with the specified arguments. In Bash notation, what you're running is:

ls ';' pwd
ls '&&' pwd

If you want ls and pwd to be run as separate commands, you can use Bash (or another shell language) to wrap them into a single command:

bash -c 'ls ; pwd'

which you can call this way:

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