2011-05-02 121 views
3

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

我的代码是

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); 
     } 

    } 
} 
+1

你有什么错误? – 2011-05-02 10:00:37

+3

你不应该问同一个问题的新问题http://stackoverflow.com/questions/5831265/java-shell-script-question – 2011-05-02 10:15:06

回答

6

您不能直接执行该脚本,因为它必须通过诸如bash外壳来解释。 请注意,bash是可执行的。

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

第1步:./ LicenseGen.sh第2步:创建licensekey -x许可证输入.xml – 2011-05-02 11:10:02

+0

@Nilesh我认为你最好编写并运行一个脚本,它可以执行两个步骤。 – stacker 2011-05-02 11:42:28

+0

谢谢你。它解决了我的问题。 – Alessandro 2013-02-21 16:20:51

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/

感谢。