目前,我有一个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程序时会出现字符? 感谢