boolean linux shell_linux 调用shell脚本传参

喜欢ヅ旅行 2023-01-10 03:56 341阅读 0赞

例子:

boolean execResult = true;

BufferedReader br = null;

try

{

//linux脚本test.sh需要另个入参(可以有0或多个参数)

String account = “test”

String pwd = “12345”;

String shellPath = “…脚本的实际路径”

ProcessBuilder b = new ProcessBuilder(“sh”, “test.sh”, account,

password);

b = b.directory(new File(shellPath));

Process rt = b.start();

String line = “”;

//脚本返回的信息流

br = new BufferedReader(new InputStreamReader(rt.getInputStream()));

while (null != (line = br.readLine()))

{

//对结果做处理

}

rt.destroy();

}

catch (Exception e)

{

execResult = false;

}

finally

{

if (null != br)

{

IOUtils.closeQuietly(br);

}

}

java5引入了ProcessBuilder类,该类的功能于Runtime.exec系列方法相同,都是启动一个进程。

主要区别是:ProcessBuilder是可以更好控制启动的进程,且可以重用;但是exec方法没有这种效果;

ProcessBuilder是从1.5加进来的,而exec系列方法是从1.0开始就有的,后续版本不断的重载这个方法,到了1.5已经有6个之多。

但是,官方的api没有任何文档说明这个两个区别,我想主要的是OO的思想,导致了这个新类的产生,功能上没什么变化

具体内容可以参见java5的api文档或者java in a nutshell

使用ProcessBuilder的例子

package net.java2000.util;

import java.io.BufferedReader;

import java.io.File;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.Arrays;

public class TestProcessBuilder {

public static void main(String args[]) throws Exception {

ProcessBuilder builder = new ProcessBuilder(“cmd”, “/c”, “dir”);

builder.directory(new File(“e:/“));

Process process = builder.start();

InputStream is = process.getInputStream();

InputStreamReader isr = new InputStreamReader(is, “GBK”);

BufferedReader br = new BufferedReader(isr);

String line;

System.out.printf(“Output of running %s is:”, Arrays.toString(args));

while ((line = br.readLine()) != null) {

System.out.println(line);

}

}

}

总结:

ProcessBuilder为进程提供了更多的控制,例如,可以设置当前工作目录,还可以改变环境参数。而Process的功能相对来说简单的多。

ProcessBuilder是一个final类,有两个带参数的构造方法,你可以通过构造方法来直接创建ProcessBuilder的对象。而 Process是一个抽象类,一般都通过Runtime.exec()和ProcessBuilder.start()来间接创建其实例

发表评论

表情:
评论列表 (有 0 条评论,341人围观)

还没有评论,来说两句吧...

相关阅读

    相关 shell脚本函数

    函数可以提高代码复用,在python、java中比较常见。 shell脚本也有函数,可以将一组命令集或语句形成一个可用代码块。 定义格式 函数名(){