2013-04-26 16 views
16
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.Il metodo exec() di runtime non sta reindirizzando l'output

Questo script funziona correttamente se lo eseguo su shell.

Qualche idea?

+0

perché questa e commerciale (&)? –

+0

per reindirizzare sia il flusso di output sia il flusso di errori nel file – user2110167

+0

hai cercato il tuo sistema per il file? –

risposta

30

È necessario utilizzare ProcessBuilder per reindirizzare.

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 
+1

Funziona perfettamente. Grazie ... Ci sono dei riferimenti dove posso leggere un po 'di più su questo, devo fare un sacco di cose sulla shell usando java. Così sarà utile per me – user2110167

+1

@ user2110167 [ Documento API su ProcessBuilder] (http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html) – johnchen902

+0

Grazie .. Buona giornata – user2110167

5

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" }); 
+0

Questo non verrà compilato, vero? –

+0

non esiste una funzione exec sovraccaricata che accetta tali input, perché fornisce errori di compilazione – user2110167

+0

@commentators: 'Runtime.getRuntime(). Exec (new String [] {" sh "," somescript.sh &> out.txt "}) – linuxeasy

Problemi correlati