2013-03-15 64 views
3

我需要从我的Java代码运行一个.sh文件,而不需要传递任何参数。我已经尝试过用如何从Java运行.sh文件?

Runtime.getRuntime().exec("src/lexparser.sh"); 

ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh"); 
Process p = pb.start(); 

上述两种方法没有工作做。是否有任何其他方法来运行.sh文件形式的Java?

+3

你是什么意思_didn't work_? – Apurv 2013-03-15 09:10:16

+0

确保你的.sh是可执行的 – 2013-03-15 09:10:42

+0

你得到了什么错误? – AmitG 2013-03-15 09:10:46

回答

8
ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh", "myArg1", "myArg2"); 
Process p = pb.start(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = null; 
while ((line = reader.readLine()) != null) 
{ 
    System.out.println(line); 
} 
+0

你在哪里使用'过程p;'? – AmitG 2013-03-15 09:12:27

+0

开始processbuilder – Biswajit 2013-03-15 09:14:08

+0

我的意思是你在以后的代码中使用'p'引用变量在哪里? – AmitG 2013-03-15 09:16:03

3

有两件事情,很容易错过:

  1. 路径和CWD。确保找到可执行文件的最简单方法是提供绝对路径,例如/usr/local/bin/lexparser.sh

  2. 过程输出。您需要阅读过程输出。输出缓冲,如果输出缓冲区满了,产生的进程将挂起。

+0

我将.sh文件保存在我的项目文件夹中。我的.sh文件应该读取一个文件并更新另一个文件的内容。它是直接从终端运行它的工作文件,但不是从java文件 – yAsH 2013-03-15 09:25:38

+0

+1的Path问题。我相信有一个exec()方法可以将工作目录作为最后一个参数(我认为如果不适用,您可以将其余部分清空) – SeKa 2013-03-15 09:28:38

+0

@ user2111009我还没有在很长一段时间内从Java衍生出进程,所以我不能提供比我已经提供的更多具体信息。尝试从脚本中明确设置CWD(使用'cd')。 – 2013-03-15 10:10:21