[英]How to run infinte loop shell script from a java program
我想從Java程序運行Shell腳本。 當我在終端中運行時,我的shell腳本(loop_shell.sh)運行良好,甚至在與其他命令(如“ ls”等)一起運行時,我的Java程序(Execute.java)也運行良好。但是當我嘗試從在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();
}
}
輸出: ur 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 ....
如果您嘗試同時運行這兩個程序,則將獲得相同的輸出。 你可以看到輸出只是打印“ ur in loop_shell.sh”並退出而無需等待shell腳本完成! 有人可以解釋一下發生了什么嗎? 請告訴我如何從Java程序運行無限循環腳本。
在互聯網上搜索並長時間摸索之后,我找到了從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腳本完成!
這是一個無限循環,您正在調用“ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.