【发布时间】:2015-03-03 18:24:54
【问题描述】:
在 Java 1.8 上调用 p = Runtime.getRuntime().exec(command)。 该命令调用 bash 脚本如下:
#!/bin/bash
args=("$@")
cat /home/user/Downloads/bigtext.txt | grep ${args[0]}
上面的 bash 脚本在命令行调用时可以正常工作。当使用 exec() 在我的 Java 应用程序中调用时,我没有得到任何 CAT 输出。它似乎没有通过 p.waitFor();我哪里错了?
如果我直接运行诸如“ls -alF”之类的命令,一切都会按预期工作。
$ java -version java version "1.8.0_31" Java(TM) SE Runtime Environment (build 1.8.0_31-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
String tmp = "/home/user/search "+input;
System.out.println(tmp); // /home/user/search sometextarg
String woa = executeCommand(tmp);
private String executeCommand(String command) {
StringBuilder output = new StringBuilder();
BufferedReader reader = null;
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
【问题讨论】:
-
bigtext.txt有多大?你在抱怨什么? -
它的 136 Mb 文本文件
标签: java exec runtime.exec