Rumah >Java >javaTutorial >Mengapakah Java `Runtime.exec()` Menghasilkan Keputusan Tidak Dijangka dengan Paip?

Mengapakah Java `Runtime.exec()` Menghasilkan Keputusan Tidak Dijangka dengan Paip?

Barbara Streisand
Barbara Streisandasal
2024-12-12 12:29:24550semak imbas

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

Pipes and Runtime.exec() dalam Java

Pertimbangkan kod Java berikut:

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

Program ini output ialah:

/etc:
adduser.co

Walau bagaimanapun, apabila dijalankan dari shell, ia betul memaparkan:

lsb-release

Gelagat Paip Merentas Platform

Seperti yang dinyatakan dalam soalan, tingkah laku paip bukan merentas platform. Pencipta Java tidak dapat menjamin bahawa paip akan berfungsi secara konsisten merentas platform yang berbeza.

Penyelesaian Alternatif

Untuk menangani isu ini, pertimbangkan pilihan berikut:

  • Laksanakan Skrip: Tulis skrip yang melaksanakan saluran paip arahan yang diingini dan laksanakan skrip dan bukannya arahan berasingan.
  • Pelaksanaan Shell: Gunakan arahan sh untuk melaksanakan arahan yang disalurkan dalam persekitaran shell:
String[] cmd = {
  "/bin/sh",
  "-c",
  "ls /etc | grep release"
};

Process p = Runtime.getRuntime().exec(cmd);

Atas ialah kandungan terperinci Mengapakah Java `Runtime.exec()` Menghasilkan Keputusan Tidak Dijangka dengan Paip?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn