【问题标题】:How to have java run terminal commands on Mac? (Echo command)如何让 java 在 Mac 上运行终端命令? (回声命令)
【发布时间】:2023-10-09 22:13:01
【问题描述】:

你如何在 Mac 上运行 java 运行命令?我看到了一些难以理解的复杂命令示例。如果我想从 java 运行一个简单的 echo 命令,我该怎么做?还没有使用 osascript。只是想看看如何将回显从 java 发送到终端。

public static void main(String[] args) throws IOException {
    ProcessBuilder x = new ProcessBuilder("echo"," hi");
    x.start();
}

这是我尝试过的代码,但它不起作用。 我认为这个问题可以帮助那些试图学习 ProcessBuilder 基础知识的人。

【问题讨论】:

  • 当我在搜索字段(在本页顶部)输入 [java] processbuilder 时,我得到了 8,461 个结果。我敢打赌,其中至少有一个回答了你的问题。
  • @Abra 我查看了其中一些,它们是高级命令。他们很难理解。我认为学习像 echo 这样的简单命令对像我这样尝试学习 ProcessBuilder 的人非常有益。

标签: java macos terminal processbuilder


【解决方案1】:

我在 Windows 上,所以下面的代码使用 Windows echo。我希望您知道 Mac echo 命令,以便您可以用您的命令替换我的命令。

import java.io.IOException;
import java.lang.ProcessBuilder;

public class PrcBldT2 {

    public static void main(String[] args) {

        // This command is for Windows operating system.
        // For MacOS, try: new ProcessBuilder("echo", "hi")
        ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "echo", "hi");

        pb.redirectError(ProcessBuilder.Redirect.INHERIT);
        pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
        try {
            Process p = pb.start();
            int result = p.waitFor();
            System.out.println("Exit status = " + result);
        }
        catch (IOException | InterruptedException x) {
            x.printStackTrace();
        }
    }
}

请注意,命令中的每个单词都是一个单独的字符串。 echo 命令输出将被重定向到System.out

【讨论】:

  • 此代码在 Mac 上不起作用。什么是 cmd.exe 和 /c?使用空格和使用大字符串作为命令是否也有区别,还是你必须做一个字符串列表?
  • @Benjamin Try ProcessBuilder pb = new ProcessBuilder("echo", "hi");
  • 将 hi 打印到控制台。两个问题。为什么我上面的例子不起作用?如何让它返回终端?因此,如果我在 java 程序中说 echo hi 终端返回 hi
最近更新 更多