代码之家  ›  专栏  ›  技术社区  ›  Alvp

使用ProcessBuilder运行shell脚本

  •  5
  • Alvp  · 技术社区  · 7 年前

    我正在尝试使用Java和ProcessBuilder运行一个脚本。当我尝试运行时,我收到以下消息:error=2,没有这样的文件或目录。

    String[] command = {"/teste/teste_back/script.sh, "+argument1+", "+argument+""};
    ProcessBuilder p = new ProcessBuilder(command);
    
        try {  
    
            // create a process builder to send a command and a argument
            Process p2 = p.start(); 
            BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream()));
            String line;
    
            log.info("Output of running " + command + " is: ");
            System.out.println("Output of running " + command + " is: ");
            while ((line = br.readLine()) != null) {
                log.info(line);
            }
    
        }  
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   Beginner    7 年前

    尝试替换

    String[] command = {"/teste/teste_back/script.sh, "+argument1+", "+argument+""};
    

    具有

    String[] command = {"/teste/teste_back/script.sh", argument1, argument};
    

    参考 ProcessBuilder

    ProcessBuilder(字符串…命令)

    使用指定的操作系统构造process builder 程序和参数。

        2
  •  4
  •   binbjz    7 年前

    可以使用ProcessBuilder定义方法。

    public static Map execCommand(String... str) {
        Map<Integer, String> map = new HashMap<>();
        ProcessBuilder pb = new ProcessBuilder(str);
        pb.redirectErrorStream(true);
        Process process = null;
        try {
            process = pb.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        BufferedReader reader = null;
        if (process != null) {
            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        }
    
        String line;
        StringBuilder stringBuilder = new StringBuilder();
        try {
            if (reader != null) {
                while ((line = reader.readLine()) != null) {
                    stringBuilder.append(line).append("\n");
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        try {
            if (process != null) {
                process.waitFor();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    
        if (process != null) {
            map.put(0, String.valueOf(process.exitValue()));
        }
    
        try {
            map.put(1, stringBuilder.toString());
        } catch (StringIndexOutOfBoundsException e) {
            if (stringBuilder.toString().length() == 0) {
                return map;
            }
        }
        return map;
    }
    

    您可以调用该函数来执行shell命令或脚本

    String cmds = "ifconfig";
    String[] callCmd = {"/bin/bash", "-c", cmds};
    System.out.println("exit code:\n" + execCommand(callCmd).get(0).toString());
    System.out.println();
    System.out.println("command result:\n" + execCommand(callCmd).get(1).toString());
    
        3
  •  2
  •   Adder    7 年前

    String[] command = {"/teste/teste_back/script.sh" , argument1, argument};