大家好,我是烤鸭:

今天分享下java 调用 shell脚本 并获取返回值。

代码实践

String cmd = "df -h";
StringBuffer sb = new StringBuffer();
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = br.readLine()) != null) {sb.append(line).append("\n");
}
String result = sb.toString();

这个result就是执行cmd后的结果。

&&或者管道 | 导致无法获取结果

String cmd = "cd /root && df -h";
StringBuffer sb = new StringBuffer();
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = br.readLine()) != null) {sb.append(line).append("\n");
}
String result = sb.toString();

脚本改成 包含&&的话,就发现result是个空值。 因为 shell脚本中如果有多个命令,那么在java中使用BufferedReader获取脚本的输出时,只能获取到第一个命令的输出,使用/bin/sh -c则能获取到所有的echo输出。

Process process = Runtime.getRuntime().exec(cmd);
// 修改为
Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", cmd});

同样的情况如果执行带 sudo 的命令,而报权限问题,很有可能也是这个问题。

比如这个shell,sudo只能覆盖到 && 之前

sudo cd /data/aaa && nohup java -jar test.jar

利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行

sh -c sudo cd /data/aaa && nohup java -jar test.jar

java 调用linux 脚本并获取返回值相关推荐

  1. 使用java运行Python脚本并获取返回值

    java运行Python脚本并获取返回值 java运行Python脚本并获取返回值 使用runtime类实现在java中运行Python脚本,话不多说,直接上代码 java运行Python脚本并获取返 ...

  2. python 调用控制台并获取返回结果_Java调用Python脚本并获取返回值

    在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...

  3. python执行linux命令返回结果_Python中调用Linux命令并获取返回值

    方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于she ...

  4. Python中调用Linux命令并获取返回值

    方法一.使用os模块的system方法: os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于sh ...

  5. bat调用python脚本并获取返回值_python生成bat脚本,并且执行bat脚本

    # -*- coding: UTF-8 -*- # 命名方式为表名_操作_字段 import os import tempfile import connectDB from controller i ...

  6. shell传参python脚本和获取返回值的探索方式

    一.python脚本 1.情况1:正常return 文件名test1.py #无参数有返回值的函数 def Have_return():return 55if __name__ == '__main_ ...

  7. oracle存储过程没有返回值,Java调用Oracle存储过程(无返回值)

    无返回值: 1:创建存储过程 此存储过程向表中插入一条数据 create or replace procedure demo_procedure(id varchar2,name varchar2,a ...

  8. java后台发送请求并获取返回值(续)

    在java后端发送请求给另一个平台,从而给前端实现 "透传"的过程中,出现:数据请求到了并传到了前端,但是控制台打印时中文显示Unicode码而前端界面中中文显示不出来!!!开始怀 ...

  9. java调用node脚本并获取输出,Node.js用readline模块实现输入输出

    什么是Readline Readline是Node.js里实现标准输入输出的封装好的模块,通过这个模块我们可以以逐行的方式读取数据流.使用require("readline")可以 ...

最新文章

  1. OpenCV下车牌定位算法实现代码
  2. rabbitmq可靠发送的自动重试机制 --转
  3. javer的表结构设计
  4. MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库
  5. 设计模式 之 设计的 六大原则(1)单一职责原则
  6. cloud 部署_使用Google Cloud AI平台开发,训练和部署TensorFlow模型
  7. orb-slam2在PC和ARM上运行
  8. 安卓应用安全指南 4.7 使用可浏览的意图
  9. https防止注入_【缺陷周话】第40期:JSON 注入
  10. [NVIDIA] Ubuntu 16.04 安装 nvidia-384 + cuda-9.0
  11. php 字符串方法名,PHP使用字符串名称调用类的方法是什么
  12. 艺术名家|翰墨异彩“三分书”——访知名书法家蔡爱军
  13. 图像分割(语义分割)的局限以及解决方法
  14. 如何使用EasyNVR+CDN突破萤石云在直播客户端数量上的限制,做到低成本高性价比的直播
  15. 卡塔尔世界杯——你认为今年谁会是冠军?
  16. 分而治之 (25 分)
  17. [CQOI2009]循环赛[HNOI2013]比赛
  18. 天地图聚合 java_关于天地图的瓦片下载
  19. 12306采用Pivotal GemFire分布式解决方案 解决尖峰高流量并发问题
  20. OCXO、VCXO、TCXO、DCXO、SPXO

热门文章

  1. react学习(32)----onref
  2. [vue] 分析下vue项目本地开发完成后部署到服务器后报404是什么原因呢?
  3. [vue] 如何在子组件中访问父组件的实例?
  4. [css] 为什么说css中能用子代选择器的时候不要用后代选择器?
  5. 前端学习(2029)vue之电商管理系统电商系统之timeline组件
  6. 前端学习(1868)vue之电商管理系统电商系统之登录退出实现表单的预先认证
  7. 前端学习(1485):restful接口规则
  8. shiro学习(22):动态添加验证规则2
  9. 第九十二期:多少程序员注意到了「中台」的背面?
  10. 第五十五期:区块链将在2020年实现的重大改变