之前有一段时间需要用java写一个程序, 在linux上面跑. 不过有一部分需要实现的功能已经用shell写出来了, 比如说用shell抓取xml文件之类等, 但是呢, 后面需要把这些文件去分析并且加入数据库中.

在这种情况下, 迫不得已采取的方式是以java为壳, 其中部分功能嵌入shell的调用.

于是在网上查了点儿资料, 写了以下的代码:

/**
 * 
 */
package dashboard;

import java.io.InputStreamReader;
import java.io.LineNumberReader;

/**
 * @author bian_wei
 *
 */
public class ExecCmd {
        public static String execCmd(String cmd)
        {
                System.out.println(cmd);
                String ret = "";
                try
                {
                        Process process = Runtime.getRuntime().exec(cmd); 

                        InputStreamReader ir = new InputStreamReader(process.getInputStream());
                        LineNumberReader input = new LineNumberReader(ir);

                        String line;

                        while ((line = input.readLine ()) != null)
                        {
                                ret += line + "\n";
                        }
                }
                catch (java.io.IOException e)
                {
                        ret = "IOException " + e.getMessage();
                }
                return ret;
        }
        public static void main(String args[])
        {
//              ExecCmd.execCmd("source ~/.bash_profile; cd /home/work/bian_wei/workspace/src && ./gethudsoninfo.sh -t 1>/home/work/dashboard.log 2>&1");
                System.out.println(ExecCmd.execCmd("/home/work/bian_wei/workspace/src/gethudsoninfo.sh -t 1>/home/work/dashboard.log 2>&1"));
//              System.out.println(ExecCmd.execCmd("ls -l /home/work"));
        }
}

其中后面的main函数是用来测试的, 可以不用管~

调用的方式很简单:

ExecCmd.execCmd("需要执行的shell命令");

当然, 这儿的返回值是直接使用的exception输出值~直接获取shell返回值的方法我没有仔细研究, 就这么着吧~~

 

The post 如何在java中调用shell脚本 appeared first on 邮递员大叔.