2012-04-10 10 views
-2
Process log_remover = Runtime.getRuntime().exec("echo \"bleh\" > test.txt"); 
log_remover.waitFor(); 
log_remover.destroy(); 

dies tut nichtsAusführung Unix-Befehle von Java unter Verwendung von Laufzeitklasse

Process node_creation = Runtime.getRuntime().exec("cp -r ../HLR"+String.valueOf(count-1)+" ../HLR"+String.valueOf(count)); 
node_creation.waitFor(); 
node_creation.destroy(); 

aber das funktioniert: S

+1

Und was ist die Frage? –

+0

lol y ist es so? –

Antwort

1

Die Umleitung funktioniert nur, wenn eine Schale verwendet wird. Runtime.exec() verwendet keine Shell.

Siehe Java Executing Linux Command

+0

hmmm ja wahr .. danke mann .. der link hat geholfen –

1

Umleitung von einer Schale umgegangen wird, und du bist nicht eine Shell hier aufrufen, so kann man nicht die Umleitung verwenden. So etwas wie dies, auf der anderen Seite funktionieren würde:

Runtime.getRuntime().exec(new String[] {"sh", "-c", "echo 'bleh' > text.txt"}); 

Hinweis ich dies geändert hat die Form von exec() zu verwenden, die eine Reihe von Strings nimmt, als richtig Strings in Anführungszeichen in einer Befehlszeile Zeichenüber ist etwas anderes das kann nur die Shell!

+0

nein hat nicht funktioniert –

+0

y hast du ein -c @Ernest Friedman-Hill? wenn es für die Shell ist, die eine Korn-Shell verwendet –

+0

Process log_remover = Runtime.getRuntime(). exec ("log_remover.sh"); Warum funktioniert das nicht –

0

klassische Fehler, den ich habe schon viele Male zuvor gesehen ...

Das erste Argument für Runtime.getRuntime().exec() ist die ausführbaren, so dass Ihr Code versuchen, einen Befehl wörtlich echo \"bleh\" > test.txt genannt auszuführen, aber es sollte zu versuchen, Führen Sie echo aus. Argumente zu ausführbaren Dateien werden nach der ausführbaren Datei übergeben, wie folgt aus:

Runtime.getRuntime().exec("echo", new String[]{"bleh"}); 

Umleiten Ausgang ist eine andere Geschichte, weil die * nix Operator > eine Shell Sache. Um dies in Java zu replizieren, müssen Sie den Ausgabestrom des Befehls abrufen und ihn zum Eingangsstrom eines anderen Prozesses pumpen.

+0

find ./HLR3/LOGS -name '* .txt' -exec rm {} \; Wie kann ich diese @Bohemian ausführen –

+0

Process log_remover = Runtime.getRuntime(). exec ("log_remover.sh"); Das funktioniert nicht –

+0

Verwenden Sie den absoluten Pfad, zB 'Runtime.getRuntime(). exec ("/usr/bin/log_remover.sh ") oder was auch immer es ist. Die Java-Exec-Umgebung entspricht nicht Ihrer Shell. – Bohemian

Verwandte Themen