Heim > Java > javaLernprogramm > Warum erzeugt Javas „Runtime.exec()' unerwartete Ergebnisse mit Pipes?

Warum erzeugt Javas „Runtime.exec()' unerwartete Ergebnisse mit Pipes?

Barbara Streisand
Freigeben: 2024-12-12 12:29:24
Original
611 Leute haben es durchsucht

Why Does Java's `Runtime.exec()` Produce Unexpected Results with Pipes?

Pipes und Runtime.exec() in Java

Betrachten Sie den folgenden Java-Code:

String commandf = "ls /etc | grep release";

try {
    Process child = Runtime.getRuntime().exec(commandf);
    child.waitFor();
    InputStream i = child.getInputStream();
    byte[] b = new byte[16];
    i.read(b, 0, b.length);
    System.out.println(new String(b));
} catch (IOException e) {
    e.printStackTrace();
    System.exit(-1);
}
Nach dem Login kopieren

Das Programm Die Ausgabe lautet:

/etc:
adduser.co
Nach dem Login kopieren

Wenn es jedoch von der Shell ausgeführt wird, funktioniert es korrekt zeigt an:

lsb-release
Nach dem Login kopieren

Plattformübergreifendes Pipe-Verhalten

Wie in der Frage erwähnt, ist das Pipe-Verhalten nicht plattformübergreifend. Die Java-Entwickler können nicht garantieren, dass Pipes auf verschiedenen Plattformen konsistent funktionieren.

Alternative Lösungen

Um dieses Problem zu beheben, ziehen Sie die folgenden Optionen in Betracht:

  • Führen Sie ein Skript aus: Schreiben Sie ein Skript, das die gewünschte Befehlspipeline ausführt, und führen Sie das Skript aus, anstatt es zu trennen Befehle.
  • Shell-Ausführung: Verwenden Sie den sh-Befehl, um die weitergeleiteten Befehle innerhalb der Shell-Umgebung auszuführen:
String[] cmd = {
  "/bin/sh",
  "-c",
  "ls /etc | grep release"
};

Process p = Runtime.getRuntime().exec(cmd);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erzeugt Javas „Runtime.exec()' unerwartete Ergebnisse mit Pipes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage