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

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

Barbara Streisand
Barbara StreisandOriginal
2024-12-12 12:29:24550Durchsuche

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);
}

Das Programm Die Ausgabe lautet:

/etc:
adduser.co

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

lsb-release

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);

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!

Stellungnahme:
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