如何分离正常退出或执行bash脚本的错误

时间:2014-07-11 07:10:45

标签: java bash

我将从Java执行一个bash脚本,我的问题是如何区分正常退出和失败退出。

我知道理论上它在正常退出时返回0而对其他退出则返回非零。但是,如果脚本调用"退出1" "退出255" ,该怎么办?如果"退出127"它将返回127,但没有找到"命令"错误。

我找到的唯一方法是准备好errOutputFile,但它看起来像傻......

PS:我使用Process.waitfor()来获取退出代码。

1 个答案:

答案 0 :(得分:0)

Process.waitFor()ref. here将返回此Process对象表示的子进程的退出值。按照惯例,值0表示正常终止。因此,如果您使用exit,则会获得指定的退出代码。

*您找到的命令未找到错误是不言自明的。

   public static void main(String[] args) {    
        String[] cmd = { "/bin/sh", "-c", "/tmp/test.sh" };
        BufferedReader bri = null, bre = null;
        int exitC = 0;
        try {
            Process p = Runtime.getRuntime().exec(cmd);
            exitC = p.waitFor();
            bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
            bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            String line = "";
            while ((line = bri.readLine()) != null) {
                System.out.println(line);               
            }
            while ((line = bre.readLine()) != null) {
                System.out.println(line);
            }
            bri.close();
            bre.close();
        } catch (Exception e) {
            e.printStackTrace();
        } 
        System.out.println("Exit Code: "+ exitC);
    }

Bash test.sh

#!/bin/bash
echo Hello World
exit 127

控制台

Hello World
Exit Code: 127