我想从java程序运行shell脚本。当我在终端中运行它时,我的shell脚本(loop_shell.sh)工作正常,甚至我的Java程序(Execute.java)在运行其他命令时运行正常,例如' ls'但是当我尝试从Java程序运行shell脚本时,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"中打印出来。和等待shell脚本完成qutting !! 有人可以解释一下发生了什么吗?并请告诉我如何从java程序运行infinte循环脚本。
答案 0 :(得分:2)
在网上搜索并长时间挠头后,我发现了从java程序运行无限循环shell脚本的正确方法。我的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="/bin/bash loop_shell.sh"; ----> change in shell command!
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();
}
}
你可以看到bash命令必须像这样" / bin / bash / loop_shell.sh" 。现在我的java程序正在等待shell脚本完成!!
答案 1 :(得分:0)
这是一个无限循环,你正在调用一个等待命令完成的“p.waitFor()”。这就是问题,只需让脚本完成,你就会看到结果。
将脚本更改为:
i=0
j=0
timer=0;
echo "u r in loop_shell.sh"
while((i!=10));
do
echo "waiting for the folder"
let i=i+1
done