如何从java程序运行无限循环shell脚本

时间:2014-10-10 17:12:19

标签: java linux bash shell

我想从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循环脚本。

2 个答案:

答案 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