我在Java中使用Runtime.exec时遇到了麻烦,似乎有些命令可以正常运行而有些则无法运行。例如,如果我运行
echo some data > data.txt
在我的终端中,它工作正常,但是如果我尝试使用Java来执行此操作则无效。
Runtime mRuntime = Runtime.getRuntime();
Process mProcess = mRuntime.exec("echo some data > data.txt");
mProcess.waitFor();
这有什么理由吗?
答案 0 :(得分:8)
echo
不是一个真正的命令,因为它有一个你可以运行的二进制文件。它是贝壳的内置功能。</ p>
您可以尝试在Windows中运行类似cmd.exe
的shell或在Linux / Mac / Unix中运行sh
,然后传递命令以字符串形式运行..就像使用'bash'一样,你可以这样做:
编辑,因为使用Runtime
要正确执行重定向,您应该使用exec
的{{1}}形式。
这是一个可以使用重定向的快速示例。
String[]
但是如果您只是想创建一个文件,可以使用Java自己的API创建该文件,而不是使用public class RunTest {
public static void main(String[] args) throws Exception {
String [] commands = { "bash", "-c", "echo hello > hello.txt" };
Runtime.getRuntime().exec(commands);
}
}
。
答案 1 :(得分:1)
那是因为echo
是shell内部命令而不是可以执行的程序!
请尝试改为bash -c "echo some data > data.txt"