【发布时间】:2023-03-06 01:38:01
【问题描述】:
我是 Groovy 的新手,我正在尝试编写一个 shell 脚本来让我自动执行命令行任务。
这里是手动方式。 我打开终端,使用一个命令,它不会立即响应,但在一段时间后,然后该命令会问几个问题,我回答 y/n 等,然后我得到最终结果。
现在我想编写一个 groovy shell 脚本,让我使用 ProcessBuilder,然后发送一个命令,获取输出,然后根据输出编写第二个命令并重复此过程,直到过程完成。
我尝试编写以下脚本,但发生的情况是我能够触发第一个命令,但它不会等待我提供输入并继续。
请告知我应该在我的代码中进行哪些更改以等待它在我发送 first_command 之后从我的代码中获取输入。
#!/usr/bin/env groovy
String workingDir = System.console().readLine 'Working Directory?';
workingDir = workingDir.trim();
if (!workingDir?.trim()) {
workingDir = "/Volumes/BOOTCAMP/Automation/test";
}
println "Your working directory is $workingDir";
Boolean isDone = false;
Boolean canMove = false;
ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash");
processBuilder.directory(new File(workingDir));
processBuilder.redirectErrorStream(true);
Process proc = processBuilder.start();
Scanner scannr = new Scanner(proc.getInputStream());
new Thread() {
public void run() {
while(true){
while (scannr.hasNextLine()){
println scannr.nextLine();
}
if(isDone){
break;
}
}
}
}.start();
PrintWriter writer = new PrintWriter(proc.getOutputStream());
new Thread() {
public void run() {
while (isDone == false){
if(canMove == false){
canMove = true;
// Write a few commands to the program.
writer.println("first_command");
writer.flush();
}
}
if(isDone){
writer.close();
}
}
}.start();
【问题讨论】:
标签: java bash macos shell groovy