java - 使用 Java 程序运行 Bash 命令的处理输入

标签 java bash

我正在使用以下对象通过我的 Java 代码运行 bash 命令。

public class Scripter {
    private final String[] ENV = {"PATH=/bin:/usr/bin/"};

    private String cmd;
    private Process process;

    public Scripter(String cmd) throws IOException {
        this.cmd = cmd;
        process = Runtime.getRuntime().exec(cmd, ENV);
    }
}

现在我正在调用这个对象并尝试打印这个函数中的输出。

public static void main(String[] args) {
    Scripter gitCheck;

    try {
        gitCheck = new Scripter("git --version");
    } catch (IOException e) {
        e.printStackTrace();
    }
    Scanner sc = new Scanner(System.in);
    if (sc.hasNext()) {
        System.out.println(sc.next());
    }
}

程序进入无限循环,什么也不做。我在这里做错了什么?

最佳答案

您正在尝试从 Java 进程的标准输入中读取一个字符串:

Scanner sc = new Scanner(System.in);
if (sc.hasNext()) { ... }

因此您的 Java 程序将阻塞,直到您实际将某些内容传递到其标准输入或关闭标准输入。

(不是死循环,和git命令无关)

如果你想阅读 git 命令的输出,你需要阅读 process.getInputStream()而不是 System.in

关于java - 使用 Java 程序运行 Bash 命令的处理输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38153553/

相关文章:

java - Linux 后台运行和终止 java 程序

java - system.out.println 输出在 Oracle Java 类中的什么位置?

java - 将 float 从 .NET 发送到 Java 并返回的最佳方法

bash - 使用 id3v2 获取 MP3 ID3 (V2) 标签

linux - 当存在具有特定名称的文件但忽略同名目录时退出脚本

Bash grep 不适用于撇号

bash 函数在 zsh env 中不起作用

java - 访问资源服务器 Controller 内的 Spring OAuth 2 JWT 负载?

java - 将当前 Activity 实例传递给方法

linux - ' : not a valid identifier Read and Curl