需要示例Java代码来运行一个shellcript

我尝试了许多不同的例子,但它没有用。

我真的很感激一些示例Java代码来运行shell脚本。

你需要Runtime.getRuntime()。exec(…)。 查看一个非常广泛的示例 (不要忘记阅读前三页)。

请记住,Runtime.exec 不是shell ; 如果你想执行一个shell脚本,你的命令行会是这样的

/bin/bash scriptname 

也就是说,你需要的shell二进制文件是完全限定的(虽然我怀疑/ bin总是在路径中)。 你不能假设如果

 myshell> foo.sh 

运行时,

 Runtime.getRuntime.exec("foo.sh"); 

也运行,因为在第一个示例中您已经在运行的shell中,但在Runtime.exec中没有。

一个经过测试的例子(Works on My Linux Machine(TM)),从前面提到的文章中删除过去:

 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class ShellScriptExecutor { static class StreamGobbler extends Thread { InputStream is; String type; StreamGobbler(InputStream is, String type) { this.is = is; this.type = type; } public void run() { try { InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) System.out.println(type + ">" + line); } catch (IOException ioe) { ioe.printStackTrace(); } } } public static void main(String[] args) { if (args.length < 1) { System.out.println("USAGE: java ShellScriptExecutor script"); System.exit(1); } try { String osName = System.getProperty("os.name"); String[] cmd = new String[2]; cmd[0] = "/bin/sh"; // should exist on all POSIX systems cmd[1] = args[0]; Runtime rt = Runtime.getRuntime(); System.out.println("Execing " + cmd[0] + " " + cmd[1] ); Process proc = rt.exec(cmd); // any error message? StreamGobbler errorGobbler = new StreamGobbler(proc .getErrorStream(), "ERROR"); // any output? StreamGobbler outputGobbler = new StreamGobbler(proc .getInputStream(), "OUTPUT"); // kick them off errorGobbler.start(); outputGobbler.start(); // any error??? int exitVal = proc.waitFor(); System.out.println("ExitValue: " + exitVal); } catch (Throwable t) { t.printStackTrace(); } } } 

Shell脚本test.sh代码

 #!/bin/sh echo "good" 

Java代码执行shell脚本test.sh

  try { Runtime rt = Runtime.getRuntime(); Process pr = rt.exec(new String[]{"/bin/sh", "./test.sh"}); BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line = ""; while ((line = input.readLine()) != null) { System.out.println(line); } } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); }