当前位置: 代码迷 >> 综合 >> java执行shell脚本 process.waitFor()返回1
  详细解决方案

java执行shell脚本 process.waitFor()返回1

热度:36   发布时间:2023-10-09 06:50:51.0

记录一下今天遇到的一个问题
在java代码中执行shell脚本,部分代码如下

Process p = null;
List<String> cmds = new ArrayList<>();
cmds.add("cmd");
cmds.add("/c");
cmds.add(cmd);
ProcessBuilder pb = new ProcessBuilder(cmds);
p = pb.start();
//Future<String> errorFuture = executor.submit(new ReadTask(p.getErrorStream()));
//Future<String> resFuture = executor.submit(new ReadTask(p.getInputStream()));
int exitValue = p.waitFor();
if (exitValue > 0) {
    throw new RuntimeException(errorFuture.get());
}

脚本中执行了git commit操作

git add xxxx 2>/dev/null
git commit -am "$(date +%Y%m%d%H%M%S)"

问题的出现在于正常情况下exitValue=0时为正常,大于0则是发生了错误,脚本第一次执行时,由于有新的代码提交 所以commit操作返回的结果是0,而此时如果再执行commit操作,返回nothing to commit之类的东西,使用"$?"打印执行结果会发现返回的结果是1,于是就抛出了异常,这里可以在commit之前先执行diff命令判断一下,如果结果是空,表示没有新的可提交的代码,执行一下自定义操作就可以了,

  相关解决方案