问题描述
我试图一个接一个地在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
命令重复上面的代码。