通过Java代码在git bash中输入一系列命令

问题描述

我试图一个一个地在git bash上获得一系列命令。我可以通过代码打开终端,但是之后输入任何内容都没有成功。例如,这是我尝试的代码

 String [] args = new String[] {"C:\\Program Files\\Git\\git-bash.exe"};
                String something="hi how are you doing";

                try {
                    ProcessBuilder p = new ProcessBuilder();
                    var proc = p.command(args).start();
                    var w = new BufferedWriter(new OutputStreamWriter(proc.getoutputStream()));
                    w.write(something);
                } catch (IOException ioException){
                    System.out.println(ioException);
                }

请让我们知道如何通过代码在git bash中输入一系列命令。

解决方法

问题是命令git-bash.exe打开了终端窗口,但是窗口的输入仍然是键盘,因此尝试写入方法OutputStream返回的getOutputStream(),类Process不执行任何操作。请参阅this问题。

作为替代方案,我建议使用ProcessBuilder执行一系列单独的git命令。当您这样做时,您的Java代码将获得命令输出。

这是一个显示git版本的简单示例。

import java.io.IOException;

public class ProcBldT4 {

    public static void main(String[] args) {
        // C:\Program Files\Git\git-bash.exe
        // C:\Program Files\Git\cmd\git.exe
        ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Git\\cmd\\git.exe","--version");
        pb.inheritIO();
        try {
            Process proc = pb.start();
            int exitStatus = proc.waitFor();
            System.out.println(exitStatus);
        }
        catch (IOException | InterruptedException x) {
            x.printStackTrace();
        }
    }
}

运行上述代码时,git的版本详细信息将被写入System.out

此外,如果git命令失败,则将错误详细信息写入System.err

您需要为每个需要发出的单独git命令重复上面的代码。