• java调用shell获取返回值


    转自:http://blog.csdn.net/tengdazhang770960436/article/details/12014839

    1.shell文件return.sh

    echo 1

    echo 2

    echo 3

    2.java文件Test.java

    [java] view plain copy
     
    1. import java.io.BufferedInputStream;  
    2. import java.io.BufferedReader;  
    3. import java.io.InputStreamReader;  
    4.   
    5. public class Test {  
    6.     public static void main(String[] args) throws Exception {  
    7.         // 定义传入shell脚本的参数,将参数放入字符串数组里  
    8.         String cmds[] = new String[9];  
    9.         cmds[0] = "/home/aiuap_cj/report/return.sh";  
    10.         cmds[1] = "1"; // 任务省Id  
    11.         cmds[2] = "2";// 插入任务人所属的纳税主体标识  
    12.         cmds[3] = "3";// 任务期间  
    13.         cmds[4] = "4";// 统计表单类型 (1:计算表,2:申报表)  
    14.         cmds[5] = "5";// 插入任务人的二级公司Id  
    15.         cmds[6] = "6";// 表名  
    16.         cmds[7] = "7";  
    17.         cmds[8] = "8";// 库名  
    18.   
    19.         // 执行shell脚本  
    20.         Process pcs = Runtime.getRuntime().exec(cmds);  
    21.   
    22.         // 定义shell返回值  
    23.         String result = null;  
    24.   
    25.         // 获取shell返回流  
    26.         BufferedInputStream in = new BufferedInputStream(pcs.getInputStream());  
    27.         // 字符流转换字节流  
    28.         BufferedReader br = new BufferedReader(new InputStreamReader(in));  
    29.         // 这里也可以输出文本日志  
    30.   
    31.         String lineStr;  
    32.         while ((lineStr = br.readLine()) != null) {  
    33.             result = lineStr;  
    34.         }  
    35.         // 关闭输入流  
    36.         br.close();  
    37.         in.close();  
    38.   
    39.         System.out.println("==============================" + result);  
    40.   
    41.     }  
    42.   
    43. }  


    解释:

    shell返回给java的值是通过echo完成的,java获取到的shell返回值是最后的echo值,所以上面的java所能获取到的值就是3。

    如果:你想把脚本执行的过程中错误给记录下来,那么可以把return.sh修改如下:

    echo 1

    echo 2

    echo 3

    rm -r /8888.txt 2>error.log

    这里有一点问题在于你无法把命令执行过程中的错误信息给直接返回到java调用端,这个时候你可以把命令执行结果返回给java调用端,然后把产生的错误日志写入到制定文件中,之后通过读取日志文件来查看错误信息。

    echo 1
    echo 2
    echo 3

    rm -r /8888.txt 2>error.log

    echo $?

  • 相关阅读:
    实验四Web服务器2
    发际线与我作队团队作业(五):冲刺总结1
    读书笔记
    socket3
    使用CAS来实现个单例模式
    基于无锁的C#并发队列实现
    C#3.0中的“多重继承”
    对并发/并行编程的总结
    谈谈多线程编程(二) 不变对象
    谈谈多线程编程(一) 安全性策略
  • 原文地址:https://www.cnblogs.com/x_wukong/p/5359895.html
Copyright © 2020-2023  润新知