【发布时间】:2014-10-10 17:12:18
【问题描述】:
我想从 java 程序运行一个 shell 脚本。当我在终端中运行我的 shell 脚本(loop_shell.sh)时,它运行良好,甚至我的 Java 程序(Execute.java)在运行其他命令(如“ls”等)时运行良好。但是当我尝试运行 shell 脚本时Java 程序,shell 脚本不打印循环内的值。这里分别是shell脚本和Java程序的代码。
loop_shell.sh:-
#bin/sh
i=0
j=0
timer=0;
echo "u r in loop_shell.sh"
while((i!=1));
do
echo "waiting for the folder"
done
Execute.java:-
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.File;
public class Execute
{
public static void main (String args[])
{
String command="./loop_shell.sh";
String output=executeCommand1(command);
System.out.println(output);
}
public static String executeCommand1(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
File dir = new File("/home/vamz/Desktop/sudhir_personal/JAVA_IMPORTANT/");//path
p = Runtime.getRuntime().exec(command,null,dir);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
}
输出:- u r in loop_shell.sh
预期输出:-
u r in loop_shell.sh
u r in loop_shell.sh
u r in loop_shell.sh
u r in loop_shell.sh
u r in loop_shell.sh
u r in loop_shell.sh
..........so on ....
如果您尝试运行这两个程序,您将获得相同的输出。你可以看到输出只是打印“你在 loop_shell.sh 中”并且 qutting 没有等待 shell 脚本完成! 有人可以解释一下发生了什么吗?并请告诉我如何从 java 程序运行无限循环脚本。
【问题讨论】: