我希望我的 Java 程序echo "text" > /home/maxbester/test.txt
在几个基于 Unix 的系统上运行该命令。
我的代码如下所示:
private static final Logger LOG = Logger.getLogger(MyClass.class);
public String run(String cmd) {
String res = null;
InputStream is = null;
try {
final Runtime rt = Runtime.getRuntime();
final Process p = rt.exec(cmd);
int exitStatus = -1;
try {
exitStatus = p.waitFor();
} catch (InterruptedException e) {
L0G.error(e.getMessage(), e);
}
is = p.getInputStream();
if (exitStatus == 0) {
if (is != null && is.available() > 0) {
StringWriter stringWriter = new StringWriter();
IOUtils.copy(is, stringWriter);
res = stringWriter.toString();
} else {
L0G.error("InputStream is not available!");
}
}
} catch (SecurityException e) {
L0G.error(e.getMessage(), e);
} catch (IOException e) {
L0G.error(e.getMessage(), e);
}
return res;
}
当 cmd 等于echo "text" > /home/maxbester/test.txt
并且文件 test.txt 存在时, res 包含"text" > /home/maxbester/test.txt
(而不是echo "text" > /home/maxbester/test.txt
,回显消失)并且 test.txt 为空。但是退出值为 0(因此它应该可以正常工作)。
我手动运行echo "text" > /home/maxbester/test.txt
。没有返回任何内容,退出值也为 0。
那么 exec 命令出了什么问题呢?