不知道java如何调用shell脚本?进来教你10行代码搞定

产品与开发的战争

       前段时间,产品提了个挺离谱的需求:通过java服务启动自己所需要的数据库和redis。什么意思呢,意思就是我们需要提供一个java服务,但是呢,我们这个java服务用到的mysql和redis没有现成的,需要由这个java服务去安装部署mysql和redis,然后再提供给自己用。
       emmmm…当时我人就傻了,后面我一想,产品都敢想这个需求,难到我堂堂一个技术还不敢去实现吗?

收起我们40米大砍刀,直接上干货:

java调用shell脚本
public static String doExec(String instruction) {
    logger.log(Level.INFO, "===execute instruction :" + instruction);
    StringBuffer result = new StringBuffer();
    Process process = null;
    BufferedReader bufrIn = null;
    BufferedReader bufrError = null;
    try {
        Runtime run = Runtime.getRuntime();
        process = run.exec(instruction);

        // 方法阻塞, 等待命令执行完成(成功会返回0)
        process.waitFor();

        bufrIn = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
        bufrError = new BufferedReader(new InputStreamReader(process.getErrorStream(), "UTF-8"));
        // 读取输出
        String line;
        while ((line = bufrIn.readLine()) != null) {
            result.append(line).append('\n');
        }
        while ((line = bufrError.readLine()) != null) {
            result.append(line).append('\n');
        }
        logger.log(Level.INFO, "===execute instruction success :" + instruction+" , result is :"+result);
    } catch (Exception e) {
        logger.log(Level.WARNING, "===execute instruction error :" + e);
    } finally {
        MyFileUtils.closeStream(bufrIn);
        MyFileUtils.closeStream(bufrError);
        // 销毁子进程
        if (process != null) {
            process.destroy();
        }
    }
    return result.toString();
}

当然,这个方法不单单局限于安装部署mysql和redis,支持任意sh命令,感兴趣的朋友可以拿去试试了!

>>>源码下载链接>>>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lwx-apollo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值