我正在尝试在Mac OS中通过Java运行Shell脚本。 Shell脚本具有git clone命令来克隆存储库。
我尝试使用流程生成器API。 虽然它没有给出任何异常,但是当我运行代码时,存储库并未克隆。
public class Test {
public static void main(String[] args) throws IOException {
Process p;
try {
List<String> cmdList = new ArrayList<String>();
cmdList.add("/Users/Folder/AnotherFolder/Another/Final/clone.sh");
ProcessBuilder pb = new ProcessBuilder(cmdList);
p = pb.start();
p.waitFor();
BufferedReader reader=new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
期望在路径中克隆git项目,但不提供任何输出或异常。
答案 0 :(得分:0)
上面的JAVA代码工作正常,我怀疑脚本可能存在问题。因为当Java程序尝试执行Shell脚本时,不会知道git local repo。
在执行具有以下脚本的程序时,git clone可以正常工作。
#!/bin/bash
mkdir ~/repo
cd ~/repo
git init
#git config user.email "email"
#git config user.name "user"
/usr/local/bin/git clone https://github.com/divaibhav/helloworld
答案 1 :(得分:0)
您将忽略脚本发出的任何错误消息。
删除所有对<algorithm>
的使用,并将其替换为对inheritIO()的调用:
if s and set(s) - set('\n.o'):
return False
# s consists entirely of \n, o and .
调用s
时,您仅在读取过程的标准输出。 if set(s) - set('\n.o'):
将导致子进程的标准输出和标准错误出现在Java进程自己的标准输出和标准错误中。这将允许您查看脚本打印的所有诊断消息。特别是,错误消息通常出现在标准错误上,而不是标准输出上。