【问题标题】:How to use linux commands involving ">" through runTime.exec()如何通过runTime.exec()使用涉及“>”的linux命令
【发布时间】:2012-12-02 16:32:55
【问题描述】:

我是 Java 新手。我想使用命令

"ps -e > /home/root/workspace/MyProject/ProcessList.txt" 

使用 runTime.exec();

在网上搜索时,我知道 runTime.exec() 不支持管道或重定向。请让我知道如何使用我的 Java 代码执行此命令。请给出准确答案。

【问题讨论】:

    标签: java linux inputstream ubuntu-12.04


    【解决方案1】:

    管道和重定向是 shell 提供的功能。简单(但肮脏)的解决方案是在 shell 中生成命令:"/bin/sh -c 'ps -e > /home/root/workspace/MyProject/ProcessList.txt'"

    编辑:我忘记了默认的StringTokenizer 不适用于带引号的字符串。以字符串数组的形式提供参数。

    String[] args = {
        "/bin/sh",
        "-c",
        "ps -e > /home/root/workspace/MyProject/ProcessList.txt"
    };
    java.lang.Runtime.getRuntime(args);
    

    【讨论】:

    • 所以你说它应该是这样的:run.exec("/bin/sh -c 'ps -e > /home/root/workspace/MyProject/ProcessList.txt'") ; ????
    • @IngilaEjaz 没错。编辑澄清。
    • @IngilaEjaz 您有权创建文件吗?目录/home/root/workspace/MyProject 已经存在?
    • @IngilaEjaz 我忘记了默认的 StringTokenizer 不适用于带引号的字符串。查看我的编辑。
    • 我完全按照你写的做了。仍然没有运气:'(它说没有这样的文件:(
    【解决方案2】:

    你可以看看这个问题:Input and Output Stream Pipe in Java

    否则,如果您知道自己在支持 bourne shell (sh) 的平台上,则可以将其添加到命令中以在该 shell 中运行原始命令:

    "sh -c 'ps -e > /home/root/workspace/MyProject/ProcessList.txt'"

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      相关资源
      最近更新 更多