考虑以下代码:
String commandf = "ls /etc | grep release";
try {
// Execute the command and wait for it to complete
Process child = Runtime.getRuntime().exec(commandf);
child.waitFor();
// Print the first 16 bytes of its output
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 运行时,它的工作方式和预期的一样:
poundifdef@parker:~/rabbit_test$ ls /etc | grep release
lsb-release
互联网告诉我,由于管道行为不是跨平台的,在 Java 工厂生产 Java 的聪明人不能保证管道工作。
我怎么能这么做?
我不会使用 Java 构造而不是 grep
和 sed
来完成所有的解析,因为如果我想改变语言,我将被迫用那种语言重写我的解析代码,这是完全不可能的。
在调用 shell 命令时,如何让 Java 执行管道和重定向?