无法通过Runtime.exec运行命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过Runtime.exec运行命令相关的知识,希望对你有一定的参考价值。

下面的命令我可以通过终端运行,但是当我试图通过java代码执行它时,它给我127个退出代码。

sledge connect --cluster_id=<name> --namespace=<name> --password=<pass>

Java的:

   try {
            String[] cmd = { "/bin/bash", "sledge connect --cluster_id=<name> --namespace=<name> --password=<pass>"};
            Process p = Runtime.getRuntime().exec(cmd);
            int po = p.waitFor();
            System.out.println(po);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
答案

您需要在命令数组中添加“-c”,因此请替换:

String[] cmd = { "/bin/bash", "sledge connect --cluster_id=<name> --namespace=<name> --password=<pass>"};

用:

String[] cmd = { "/bin/bash", "-c", "sledge connect --cluster_id=<name> --namespace=<name> --password=<pass>"};

从bash手册:

-c string如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。

以上是关于无法通过Runtime.exec运行命令的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Opensuse 上运行 Java Runtime.exec()

使用 Java Runtime.exec() 在 Hadoop 上运行命令

如何通过在 java 中使用 Runtime.exec() 运行 sqlplus 来捕获 sqlplus 窗口的输出

调用 Runtime.exec 时捕获标准输出

Runtime.exec() 的安全问题

带有 Weka 命令行的 ProcessBuilder/Runtime.exec() 演示特殊行为