在Java中显示脚本的stdin

时间:2014-03-10 09:46:16

标签: java bash process inputstream bufferedreader

目前,我有一个java程序,它执行脚本input.sh作为外部进程。该脚本只是回显用户输入的行,并添加了历史记录功能。

以下是input.sh的代码:

#!/bin/sh
IFS=""
while read -e line
do
    echo $line
    history -s $line
done

这是我的java代码程序Main.java

public class Main {
    static public void main(String[] args) {
        try {
            ProcessBuilder pb = new ProcessBuilder().redirectInput(ProcessBuilder.Redirect.INHERIT);
            Process script = pb.command("/bin/sh", "-i","input.sh").start();

            BufferedReader br = new BufferedReader(new InputStreamReader(script.getInputStream()));
            String line = null;
            System.out.println("Starting");

            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }
        catch (IOException e) {
        }
    }
}

现在,当我在终端中执行./input.sh时,脚本的行为完全符合预期。它将显示用户输入的内容,按下左右箭头键时移动光标(而不是显示 ^ [[D ),向上和向下按将导航先前输入的命令,并且按Enter将打印用户刚输入的内容。但是,当我执行java程序时,我无法看到我正在输入的内容,但会显示结果。

有人可以告诉我为什么现在输入java程序时会出现字符? 感谢

0 个答案:

没有答案