Java调用linux shell脚本的方法

首先,我们需要增加用户对该脚本的执行权限,即

代码如下:

String cmdstring = "chmod a+x test.sh";
 Process proc = Runtime.getRuntime().exec(cmdstring);
 proc.waitFor(); //阻塞,直到上述命令执行完
 cmdstring = "bash test.sh"; //这里也可以是ksh等
 proc = Runtime.getRuntime().exec(cmdstring);
 // 注意下面的操作
 string ls_1;
 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(proc.getInputStream());
 while ( (ls_1=bufferedReader.readLine()) != null);
 bufferedReader.close();
 proc.waitFor();

为什么要有上面那段操作呢?

原因是:可执行程序的输出可能会比较多,而运行窗口的输出缓冲区有限,会造成waitFor一直阻塞。解决的办法是,利用Java提供的Process类提供的getInputStream,getErrorStream方法让Java虚拟机截获被调用程序的标准输出、错误输出,在waitfor()命令之前读掉输出缓冲区中的内容。

希望大家能够喜欢本文,有疑问请给我留言。

(0)

相关推荐

  • JAVA如何调用Shell脚本

    在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell.先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本. JAVA调用很简单,例子如下: 首先是shell脚本 #!/bin/sh echo Begin word cluster /home/felven/word2vec/word2vec -train /home/felven/word2vec/resultbig.tx

  • 简介Java程序的Shell脚本包装

    在许多Java工程中,经常会看到带有程序自定义参数调用Java命令的包装shell脚本.例如, $ANT_HOME/bin/ant, $GROOVY_HOME/bin/groovy ,甚至在我们的TimeMachine Scheduler程序中也能见到 $TIMEMACHINE_HOME/bin/scheduler.sh 编写这些包装脚本很无聊而且容易出错.大多数的问题来自为程序设置正确的classpath.如果你正在为一个公司开发内部项目的话,那么你有可能远离纠结的路径以及环境变量问题.但是对

  • java运行shell脚本方法示例

    现在通过CommandHelper.execute方法可以执行命令,该类实现 复制代码 代码如下: package javaapplication3;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * * @author chenshu */public class CommandHelper {    //default time out, in mill

  • SHELL脚本监控JAVA进程的代码

    脚本内容:java_check.sh #! /bin/bash # if [ -z `pidof java` ]; then echo -e `date +%Y-%m-%d` `date +%R`. "33[31m33[1m(JAVA)Process does not exist! 33[0m" >> /data/logs/java_check.log /usr/local/tomcat/bin/startup.sh >/dev/null 2>&1 sl

  • Linux中使用Shell脚本查看Java线程的CPU使用情况

    线上Java应用,在业务高峰期的时候经常出现CPU跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用CPU情况,结合jstack日志,排查到具体的线程类名. 一.首先获得jvm的进程ID: 复制代码 代码如下: ps -ef|grep javatomcat     374   372  1 11:45 ?        00:02:30 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile

  • Java调用linux shell脚本的方法

    首先,我们需要增加用户对该脚本的执行权限,即 复制代码 代码如下: String cmdstring = "chmod a+x test.sh";  Process proc = Runtime.getRuntime().exec(cmdstring);  proc.waitFor(); //阻塞,直到上述命令执行完  cmdstring = "bash test.sh"; //这里也可以是ksh等  proc = Runtime.getRuntime().exec

  • Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` CUR_SHELL_DIR=`pwd` CUR_SHELL_NAME=`basename ${BASH_SOURCE}` #修改这里jar包名即可 JAR_NAME="xxxxxxxxxxxx.jar" JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME #JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:Pe

  • shell中循环调用hive sql 脚本的方法

    脚本tt.sh的内容如下: #!/bin/bash params=$1 for param in $params do echo $param done 运行方式为:sh tt.sh "1 2 3 4 5" 输出为: 1 2 3 4 5 所以参考上面的命令,可以把hql的脚本写为如下方式,就可以循环执行sql: 功能:查找字符串 comments 中的param第一次出现的位置 ,返回的是位置数字 #!/bin/bash params=$1 for param in $params d

  • 在linux shell脚本中root切换到普通用户执行脚本或命令的方法

    需求: 安装deb包,设置程序安装后启动,不需要root权限启动程序 | 不能用root权限启动 其他开机启动选项 方法:root临时降低权限 secUser=`who am i | awk '{print $1}'` #echo $secUser su $secUser -c <指令> > /dev/null 2>&1 & #这一条命令的执行权限是临时的,只在本条语句起作用 id -u # 结果为0,还是root用户权限 附: su --help -c, --co

  • Linux Shell脚本中获取本机ip地址方法

    方法一:ifconfig -a ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" 命令解析 ifconfig -a  和window下执行此命令一样道理,返回本机所有ip信息 grep inet                  截取包含ip的行 grep -v 127.0.0.1      去掉本地指向的那行 grep -v inet6             去掉

  • python调用bash shell脚本方法

    目录 1. os.system() 1.1. demo 2. os.popen() 2.1 demo 3. commands模块 4. subprocess 4.1 demo 1. os.system() help(os.system) 1.1. demo os.system(command):该方法在调用完shell脚本后,返回一个16位的二进制数, 低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码, 即脚本中exit 1的代码执行后,os.system函数返回值的高位数则是1,如果低位

  • Linux Shell 脚本编程入门教程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用.深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一. Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh).Bourne

  • shell for循环、循环变量值付给其他shell脚本的方法

    本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数. shell for 循环: #!第一种写法 类似C.Java for ((i=1; i<=100; i ++)) do echo $i done #!第二种写法 in应用 for i in {1..100} do echo $i done #!第三种写法 seq 使用 for i in `seq 1 100` do echo $i done 将循环变量赋值到下一个脚本: 在运行shell脚本时候,有三种方式来

  • linux shell脚本对未定义变量的判断以及if的用法详解

    环境 操作系统:win10 虚拟机:centos7 需求 因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作: ①先查询之前的进程ID ②杀死之前的,在启动新了 时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合到启动脚本里去. 最开始我是这么写的: #!/bin/bash echo "ggjob-search..." pid=`ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|

  • Idea使用Bashsupport插件编辑Shell脚本的方法

    目录 一.安装bashsupport插件 二.安装git软件 三.IDEA配置 四.其他 IEDA中的Bashsupport插件支持在IDEA中编写shell脚本文件,有友好的代码格式,支持自动补全,检查错误,并且配置完之后,还可以在IEDA中直接运行shell脚本.下面将一步一步演示插件的安装和配置. 一.安装bashsupport插件 安装完之后,保持插件选中并切实enable的状态,如下图所示,然后重启IDEA. 二.安装git软件 基本上直接安装全部默认就可以,不过要记住自己的安装目录.

随机推荐