簡體   English   中英

如何從Java程序運行無限循環Shell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM