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