【问题标题】:to run shell script through java通过java运行shell脚本
【发布时间】:2011-05-02 09:57:22
【问题描述】:

我想通过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);
       }

     }
}

【问题讨论】:

标签: java shell


【解决方案1】:

您不能直接执行脚本,因为它必须由 bash 之类的 shell 解释。 请注意,bash 是可执行文件。

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

【讨论】:

  • 第 1 步:./LicenseGen.sh 第 2 步:创建 licensekey -x license-input.xml
  • @Nilesh 我认为你最好编写并运行一个执行这两个步骤的脚本。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    谢谢。

    【讨论】:

      最近更新 更多