通过java运行shell脚本

我想通过java运行一个shell脚本。我正在使用许可证生成工具,它可以在./LicenseGen.sh命令的帮助下调用,在它下我需要执行另一个命令create 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 list=new List(); 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); } } } 

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

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

我已经广泛使用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/

谢谢。