Ausführen von Piped-Befehlen mit Runtime.exec()
In Java wird Runtime.exec() häufig zum Ausführen von Shell-Befehlen verwendet. Der Versuch, einen durch Pipes getrennten Befehl wie „ls /etc | grep release“ direkt mit Runtime.exec() auszuführen, kann jedoch aufgrund plattformübergreifender Unterschiede in der Pipe-Verarbeitung zu unerwartetem Verhalten führen.
Lösung:
1. Erstellen Sie ein Skript:
Um eine plattformunabhängige Pipe-Ausführung sicherzustellen, schreiben Sie ein Skript, das die gewünschte Pipeline ausführt, und führen Sie das Skript anstelle der separaten Befehle aus. Zum Beispiel:
// script.sh ls /etc | grep release
Führen Sie dann das Skript mit Runtime.exec() aus:
String command = "/bin/sh script.sh"; Process child = Runtime.getRuntime().exec(command);
2. Shell-Aufruf verwenden:
Ein anderer Ansatz besteht darin, die Shell direkt aufzurufen und den durch Pipes getrennten Befehl als einzelnes Argument zu übergeben. Dies kann mit dem folgenden Code erreicht werden:
String[] cmd = { "/bin/sh", "-c", "ls /etc | grep release" }; Process child = Runtime.getRuntime().exec(cmd);
Das obige ist der detaillierte Inhalt vonWie führt man Piped-Befehle mit Javas Runtime.exec() zuverlässig aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!