通过Java运行Shell脚本

3
我希望通过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<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
你不应该为同一个问题提出新的问题,参考链接:http://stackoverflow.com/questions/5831265/java-shell-script-question - jmj
3个回答

6

由于脚本需要被像bash这样的shell解释,因此您无法直接执行该脚本。请注意,bash是一个可执行文件。

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

步骤1:./LicenseGen.sh 步骤2:创建许可证密钥 -x license-input.xml - Nilesh Shukla
@Nilesh 我认为你最好编写并运行一个可以同时执行这两个步骤的脚本。 - stacker

0

0

我已经广泛使用JSch进行远程登录和脚本执行。 我使用google Expect4jJsch一起在expect模式(send/wait)下执行远程机器上的脚本。 由于您必须一个接一个地执行命令,因此可以尝试这个。

它也可以用于您需要的本地执行。 唯一的担心是您需要登录(到本地计算机)以进行执行。

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

谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接