如果我在unix shell中使用此命令:
ls -lrt > ttrr
我得到了我的输出。
但是当我把这个命令放在java程序中然后它不起作用时,它不会给出任何错误,但是在程序执行完成后没有创建文件。
这是我的计划:
public class sam
{
public static void main(String args[])
{
try
{
Runtime.getRuntime().exec(" ls -lrt > ttrr");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
在Unix中,您需要注意命令行首先由shell处理,然后执行生成的字符串。在您的情况下,此命令:ls -lrt > ttrr
中包含>
,必须由shell处理。
当您使用Runtime.getRuntime().exec(command);
时,command
字符串不会被shell处理,而是直接发送到操作系统以便执行。
如果您希望正确执行命令(我在谈论ls -lrt > ttrr
),您必须在同一命令中执行shell。在Bash的情况下,你可以使用这样的东西:
public static void main(String args[]) {
try {
Runtime.getRuntime().exec(new String[] {"bash", "-c", "ls -lrt > ttrr"});
} catch(Exception e) {
e.printStackTrace();
}
}
实际执行的是一个带有两个参数的命令:“bash”(shell程序),“ - c”用于在命令行中执行脚本的Bash选项,以及“ls -lrt> ttrr”是你想要运行的实际“命令”。