执行在使用Java执行期间获取输入的shell脚本

时间:2018-03-05 10:50:50

标签: java bash shell

我正在尝试用Java执行shell脚本。我能够通过以下方式实现这一目标。

#!/bin/bash
read -p "Enter your name : " name
echo "Hi, $name. Let us be friends!"

如果shell需要用户输入,我将如何提供用户输入? 如何实现这个?

示例:my_script.sh

__init__.py

我需要通过Java输入名称。

2 个答案:

答案 0 :(得分:1)

编辑以下评论

    // writing to file
    String input = "Bob";
    try ( PrintWriter out = new PrintWriter( filename ) ) {
        out.print( input );
    }

    // redirecting input from file
    pb.redirectInput( new File( filename ) );
    pb.redirectOutput( Redirect.INHERIT );

初步答复;

取决于它的启动方式,以下可能就足够了

pb.redirectInput( Redirect.INHERIT );

但是要查看消息,还应将输出重定向到std out

pb.redirectOutput( Redirect.INHERIT );

和tee输出可能是从shell

完成的
exec 6>&1 1> >(tee /new_path/out.txt)  # start tee output to out.txt (save current output to file descriptor 6 for example)
...
exec >&6      # end to restore standard output and terminate tee process

关于InterruptedException的注意事项,它不应该被捕获并继续执行程序,而是传播到任务真正完成的位置。

答案 1 :(得分:0)

您好,您可以这样做: -

 String inputName = "blabla";
 String command = "/path_to/my_script.sh  " + inputName;
 Process p;
 try {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

现在你必须修改你的shell脚本,如下所示: -

#!/bin/bash
#read -p "Enter your name : " name
name = $1
echo "Hi, $name. Let us be friends!"