Il metodo exec () di runtime non sta reindirizzando l’output

Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt"); 

Sto eseguendo questo comando utilizzando Java. Lo script è in esecuzione ma non sta reindirizzando il suo stream al file. Inoltre, il file out.txt non viene creato.

Questo script funziona bene se lo eseguo su shell.

Qualche idea?

È necessario utilizzare ProcessBuilder per 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 

Quando si esegue un comando, non è in esecuzione alcuna shell e non sono disponibili comandi o funzioni della shell. Per usare qualcosa come &> hai bisogno di una shell. Ne hai uno ma non lo stai trasmettendo. prova invece

 Runtime.getRuntime().exec(new String[] { "sh", "somescript.sh &> out.txt" });