java代码实现执行linux命令并获取返回结果

_TYRO- / 2023-08-30 / 原文

public static String runLinuxCmd(String command) throws IOException{

    if(System.getProperty("os.name").toLowerCase().contains("windows")){
        logger.info("当前操作系统为windows,返回空");
        return "";
    }

    Runtime runtime=Runtime.getRuntime();

    InputStreamReader inputStreamReader=null;
    BufferedReader bufferedReader=null;
    OutputStreamWriter outputStreamWriter=null;
    BufferedWriter bufferedWriter=null;
    PrintWriter printWriter=null;

    Process process=null;
    String result="";
    try {

        process=runtime.exec("/bin/bash",null,null);
        inputStreamReader=new InputStreamReader(process.getInputStream());
        bufferedReader=new BufferedReader(inputStreamReader);

        outputStreamWriter=new OutputStreamWriter(process.getOutputStream());
        bufferedWriter=new BufferedWriter(outputStreamWriter);
        printWriter=new PrintWriter(bufferedWriter,true);

        logger.info("执行命令: {}",command);
        printWriter.println(command);
        printWriter.println("exit");

        String tempResult="";
        while ((tempResult=bufferedReader.readLine())!=null){
            result=tempResult;
        }
        logger.info("返回结果:"+result);

    }catch (IOException e){
        logger.error("",e);
    }finally {
        if(process!=null){
            try {
                process.waitFor();
            }catch (InterruptedException e){
                logger.error("",e);
            }
        }
        if(printWriter!=null) printWriter.close();
        if(bufferedWriter!=null) bufferedWriter.close();
        if(printWriter!=null) printWriter.close();
        if(bufferedReader!=null) bufferedReader.close();
        if(inputStreamReader!=null) inputStreamReader.close();

        if(process!=null){
            process.destroy();
        }
        return result;
    }
}