java - 使用 Java 在 Mac 上的终端中运行使用管道的命令

标签 java macos shell terminal

我有一个在终端 OSX 上运行的命令:

cat File1 | ./huawei2text.pl > ~/File2.txt && cat ~/File2.txt| tr "," "\n"  > ~/Output.txt

如何仅使用 java 运行此命令?

我尝试了这段代码:

String whatToRun = "cat File1 | ./File.pl > ~/File2.txt && cat ~/File2.txt| tr "," "\n"  > ~/Output.txt";
   try
   {
     Runtime rt = Runtime.getRuntime();
     Process proc = rt.exec(whatToRun);
     int exitVal = proc.waitFor();
     System.out.println("Process exitValue:" + exitVal);
   } catch (Throwable t)
     {
       t.printStackTrace();
     }

已更新

答案及解决方案:

String whatToRun = "cat File1 | ./File.pl > File2.txt "
            + "&& cat File2.txt| tr \",\" \"\n\"  > Output.txt";
String[] shellcmd = {"/bin/sh", "-c", whatToRun};

try {
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(shellcmd);
    int exitVal = proc.waitFor();
    System.out.println("Process exitValue:" + exitVal);
    }
catch (Throwable t) {
    t.printStackTrace();
}

现在可以了。谢谢!

最佳答案

管道将由shell 解释。让您的 shell 执行以下命令:

String[] shellcmd = {
  "/bin/sh",
  "-c",
  whatToRun
};

Process proc = rt.exec(shellcmd);

关于java - 使用 Java 在 Mac 上的终端中运行使用管道的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18312034/

相关文章:

java - Spring JPA REST 一对多

java - 在 Java 中,如何检查 AutoCloseable.close() 是否已被调用?

java - 舍入错误给了我无效的答案

macos - 如何将 NSPersistentContainer 与 NSPersistentDocument 一起使用

linux - 在所有服务器上自动化 mkdir、chmod 和 scp

java - Guice:如何为所有类型绑定(bind)泛型?

ios - Xcode |提取开发者信息时出错

cocoa - Mac OSX 全屏应用程序问题

php - PHP 中的 system()、exec() 和 shell_exec() 有什么区别?

php - 无法从网络服务器运行节点