通过java运行shell脚本

时间:2011-05-02 09:57:22

标签: java shell

我想通过java运行一个shell脚本。我正在使用许可证生成工具,它可以在./LicenseGen.sh命令的帮助下调用,在它下我需要执行另一个命令 创建licensekey -x license-input.xml 这会创建一个新的licensekey.xml文件,其中license-input.xml是一个输入文件,licensekey是一个输出xml文件,如何在java中提供帮助我。

我的代码是

import java.io.*;
import java.util.*;

public class ProcessExample {

/**
 * @param args
 */
 public static void main(String args[]) throws IOException {

       File file=new File("/opt");
      // List<String> list=new List<String>();
       ProcessBuilder processBuilder = new ProcessBuilder("./LicenseGen.sh");
       processBuilder.directory(file);

        Process process=processBuilder.start();      
       //processBuilder.command("create licensekey -x license-input.xml");
       //process=processBuilder.start();
       InputStream is = process.getInputStream();
       InputStreamReader isr = new InputStreamReader(is);
       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);
       }

     }
}

3 个答案:

答案 0 :(得分:6)

您不能直接执行脚本,因为它必须由像bash这样的shell解释。 请注意,bash是可执行的。

ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/path/LicenseGen.sh");  

答案 1 :(得分:0)

使用commons cli http://commons.apache.org/cli/ 祝你好运!

答案 2 :(得分:0)

我已广泛使用JSch进行远程登录和脚本执行。我使用google Expect4jJsch在期望模式下的远程机器上执行脚本(发送/等待)。因为,你必须一个接一个地执行命令,你可以试试这个。

它也可以用于您需要的本地执行。 The only worry is that you need to login (into your local machine) for execution.

对于jsch,请转到http://www.jcraft.com/jsch/
对于Expect4j,请转到http://code.google.com/p/expect4j/

感谢。