Ich versuche, einige Linux-Befehle von Java aus mit Umleitung (> &) und Pipes (|) auszuführen. Wie kann Java aufrufen csh
oder bash
Befehle?
Ich habe versucht, dies zu verwenden:
Process p = Runtime.getRuntime().exec("shell command");
Es ist jedoch nicht mit Umleitungen oder Pipes kompatibel.
java
shell
command-line
Narek
quelle
quelle
cat
undcsh
haben nichts miteinander zu tun.Antworten:
exec führt keinen Befehl in Ihrer Shell aus
Versuchen
stattdessen.
EDIT :: Ich habe kein csh auf meinem System, also habe ich stattdessen bash verwendet. Folgendes hat bei mir funktioniert
quelle
Verwenden Sie ProcessBuilder, um Befehle und Argumente anstelle von Leerzeichen zu trennen. Dies sollte unabhängig von der verwendeten Shell funktionieren:
quelle
Aufbauend auf dem Beispiel von @ Tim, um eine eigenständige Methode zu erstellen:
(Das Testbeispiel ist ein Befehl, der alle Dateien in einem Verzeichnis und seinen Unterverzeichnissen rekursiv in chronologischer Reihenfolge auflistet .)
Übrigens, wenn mir jemand sagen kann, warum ich dort vier und acht Backslashes anstelle von zwei und vier brauche, kann ich etwas lernen. Es gibt eine Ebene mehr Unausweichlichkeit als das, was ich zähle.
Bearbeiten: Habe gerade denselben Code unter Linux ausprobiert und dort stellt sich heraus, dass ich halb so viele Backslashes im Testbefehl benötige! (Das heißt: die erwartete Anzahl von zwei und vier.) Jetzt ist es nicht mehr nur seltsam, es ist ein Portabilitätsproblem.
quelle