java - 使用java创建unix文件

标签 java linux unix

如果我在 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();
                }
         }
   }

最佳答案

在 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”,它是您要运行的实际“命令”。

关于java - 使用java创建unix文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22498085/

相关文章:

linux - GNUPLOT:无效的表达?

c - Linux 是否为僵尸进程保留内核堆栈?

java - GWT 中的 UIBinder 和 MVP

android - 在 Android 内核中安装内核模块

通过 shell 脚本的 Java 命令行参数

bash - bash 脚本中的双感叹号

linux - 如何在 Linux 中使用 ctrl+R 搜索所有匹配的先前命令

java - 身份验证后重定向到 protected 页面

java - 如何在java中创建由二维int数组组成的二维数组?

java - 条件和循环反向词我错过了什么?