使用java运行交互式shellcript

时间:2014-06-30 09:59:46

标签: java shell

我正在编写一个javacode来调用交互式shellcript并使用进程构建器来调用shellscript。我知道要将参数传递给这个shell脚本,我必须使用其输入流检查它的输出,并需要使用输出流将命令传递给它。我的问题是,如何使用输入流知道它是否提示输入值?

我的代码:

  ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh","--ip="+formobj.getUpFile().getFileName(),"--seqs="+seqs);

        script_exec = pb2.start();

                OutputStream in = script_exec.getOutputStream();

                InputStreamReader rd=new InputStreamReader(script_exec.getInputStream());   

                pb2.redirectError();

                BufferedReader reader1 =new BufferedReader(new InputStreamReader(script_exec.getInputStream()));

                StringBuffer out=new StringBuffer();

                String output_line = "";    

                  while ((output_line = reader1.readLine())!= null) 
                  {
                           out=out.append(output_line+"/n");
                           System.out.println("val of output_line"+output_line);

                           //---> i need code here to check that whether script is prompting for taking input ,so i can pass it values using output stream

                  }

有没有办法直接知道脚本正在等待用户的输入?

1 个答案:

答案 0 :(得分:0)

读取进程输出流并检查输入提示,如果知道输入提示,则将值放入处理inupt流。 否则你无法检查。

ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
BufferedReader b1 = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter w1 = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
String line = "";
String outp = "";
while ((line = b1.readLine()) != null) {
  if (line.equals("PLEASE INPUT THE VALUE:")) {
     // output to stream
     w1.write("42");
  }
  outp += line + "\n";
}

...

UPD:对于你的代码,它应该是那样的

    ProcessBuilder pb2=new ProcessBuilder("/home/ahijeet/sample1.sh","--ip="+formobj.getUpFile().getFileName(),"--seqs="+seqs);

    script_exec = pb2.start();

            OutputStream in = script_exec.getOutputStream();

            InputStreamReader rd=new InputStreamReader(script_exec.getInputStream());   

            pb2.redirectError();

            BufferedReader reader1 =new BufferedReader(new InputStreamReader(script_exec.getInputStream()));

            StringBuffer out=new StringBuffer();

            String output_line = "";    

              while ((output_line = reader1.readLine())!= null) 
              {
                       out=out.append(output_line+"/n");
                       System.out.println("val of output_line"+output_line);

                       //---> i need code here to check that whether script is prompting for taking input ,so i can pass it values using output stream
                       if (output_line.equals("PLEASE INPUT THE VALUE:")) {
                           // output to stream
                           in.write("42");
                       }

              }