之前有一段时间需要用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返回值的方法我没有仔细研究, 就这么着吧~~
本文链接:https://www.poisonbian.com/post/468.html 转载需授权!