Java 中的管道和 Runtime.exec()
考虑以下 Java 代码:
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); }
程序的输出是:
/etc: adduser.co
但是,当从shell 中,它正确显示:
lsb-release
跨平台管道行为
正如问题中提到的,管道行为不是跨平台的。 Java 创建者无法保证管道在不同平台上一致工作。
替代解决方案
要解决此问题,请考虑以下选项:
String[] cmd = { "/bin/sh", "-c", "ls /etc | grep release" }; Process p = Runtime.getRuntime().exec(cmd);
以上是为什么 Java 的 `Runtime.exec()` 使用管道会产生意外的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!