Java 如何使管道与Runtime.exec()一起使用?

考虑以下代码:

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

当然,当我从外壳运行时,它可以按预期工作:

poundifdef@parker:~/rabbit_test$ ls /etc | grep release

lsb-release

互联网告诉我,由于管道行为不是跨平台的事实,在生产Java的Java工厂工作的才华横溢的人无法保证管道能正常工作。

我怎样才能做到这一点?

我不会使用Java构造而不是grepand 来进行所有解析sed,因为如果我想更改语言,将被迫用该语言重新编写解析代码,这完全是不行的。

调用Shell命令时,如何使Java做管道和重定向?

回答:

编写脚本,然后执行脚本而不是单独的命令。

管道是外壳的一部分,因此你还可以执行以下操作:

String[] cmd = {

"/bin/sh",

"-c",

"ls /etc | grep release"

};

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

以上是 Java 如何使管道与Runtime.exec()一起使用? 的全部内容, 来源链接: utcz.com/qa/417841.html

回到顶部