2012-02-21 68 views
-1

有谁知道如何从java应用程序执行shell脚本? 我使用win 7开发java应用程序,脚本文件在我的硬盘上。如何从Java应用程序执行UNIX Shell脚本?

+0

类似于http://stackoverflow.com/questions/525212/how-to-run-unix-shell-script-from-java-code – 2012-02-21 12:25:35

+1

是什么让你认为你可以在Windows 7上运行UNIX Shell脚本机器呢? – 2012-02-21 12:25:49

+0

应用程序应该在windows上运行,而unix shell脚本应该通过该应用程序在Unix服务器上执行。 – itro 2012-02-22 09:13:32

回答

1

您可以在java.lang.Runtime类中使用exec()系列方法。当然,如果不下载像MinGW或Cygwin这样的软件来支持它(也许你的意思是当你的程序在另一台机器上运行时你会执行该脚本),那么你不能在Windows机器上执行UNIX shell脚本。

+0

您能否提供代码狙击如何使用MinGW或Cygwin? – itro 2012-02-27 10:24:54

+0

这些都是您安装的在Windows上提供UNIX命令行工具(即“bash”,“ls”,“cat”,“mv”和数百个)的环境。然后,您可以像在UNIX上一样从Java运行它们 - 例如,请参阅@ SarathKumarSivan的答案。 – 2012-02-27 12:07:50

0

首先,要在Windows 7系统上执行Unix shell脚本,您需要一个Unix shell。有几种可用的,包括cygwin。假设你使用bash(这些日子最常见),要执行的命令是bash -c scriptname来执行你的脚本。如果您只是执行Windows cmd或bat文件,则该命令类似于cmd /c scriptname您应检查cmd的帮助以验证此操作。

一旦你开始这个过程,你需要立即启动一个线程开始读取它的stdout。您需要从流程中获取输出流并开始读取。如果你不这样做,两个过程之间的管道将被填满,并且子过程将挂起。您还需要为子进程的stderr执行相同的操作,除非在创建进程时使用该选项合并两个流。

3

希望这将成为你的目的:

import java.io.IOException; 
import java.io.InputStream; 

public class RunShellScript { 

    public static void runShellScript(String unixCommand) throws IOException, InterruptedException { 
     ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", unixCommand); 
     processBuilder.redirectErrorStream(true); 
     Process shellProcess = processBuilder.start(); 
     InputStream inputStream = shellProcess.getInputStream(); 
     int consoleDisplay; 
     while((consoleDisplay=inputStream.read())!=-1) { 
      System.out.println(consoleDisplay); 
     } 
     try { 
      inputStream.close(); 
     } catch (IOException iOException) { } 
    } 

    public static void main(String[] args) throws IOException, InterruptedException { 
     String unixCommand = "sh hello-world.sh"; 
     runShellScript(unixCommand); 
    } 
} 

上面的代码将运行脚本包含在hello-world.sh文件,它会显示shell脚本控制台上的输出。

+0

“ProcessBuilder”的+1。 – trashgod 2012-02-21 19:32:59

+0

上面的代码与我联系工作,但运行应用程序时出错。 **错误:sh.exe停止工作。**原因是什么? – itro 2012-02-22 09:16:25

+0

你真的在unix机器上试过吗? – 2012-02-22 16:40:15