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
Lepaskan: 2024-12-12 12:29:24
asal
552 orang telah melayarinya

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);
}
Salin selepas log masuk

Program ini output ialah:

/etc:
adduser.co
Salin selepas log masuk

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

lsb-release
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan