Runtime's exec() method is not redirecting the output

21,044

Solution 1

You need to use ProcessBuilder to redirect.

ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh");
builder.redirectOutput(new File("out.txt"));
builder.redirectError(new File("out.txt"));
Process p = builder.start(); // may throw IOException

Solution 2

When you run a command, there is no shell running and any shell commands or functions are not available. To use something like &> you need a shell. You have one but you are not passing it to it. try instead.

Runtime.getRuntime().exec(new String[] { "sh", "somescript.sh &> out.txt" });
Share:
21,044
user2110167
Author by

user2110167

Updated on July 15, 2022

Comments

  • user2110167
    user2110167 almost 2 years
    Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt");
    

    I am running this command using Java. The script is running but it's not redirecting its stream to the file. Moreover, the file out.txt is not getting created.

    This script runs fine if I run it on shell.

    Any ideas?