如何在交互式程序中使用输入重定向和手动输入?

时间:2015-03-04 19:34:55

标签: bash input io-redirection

我有一个程序的可执行文件,用Fortran编写,需要交互式输入,例如20个输入。我想要的是通过输入重定向给出前19个输入,但是从我的键盘输出最后一个。原因是当我运行程序时,我收到一条消息

file list_wall.dat written - modify it to group walls
modify wallList.dat (add flag type) - enter 1 when ready

所以在我按1之前,我需要手动修改文件,然后手动按1。我试图像这样运行它

./my_interactive_program < input.in

我在这个input.in文件中写了前19行。 但是,当它到达最后一行时,我收到如下消息:

$forrtl: severe (24): end-of-file during read, unit -4, file stdin

因此,它不是等待键盘的输入,而是检测文件的结尾,程序崩溃。 我能为此做些什么吗?

3 个答案:

答案 0 :(得分:1)

如果您可以预先询问用户第20个输入:

read -p "input 20: " inp
{ cat input.in; echo "$inp"; } | ./my_interactive_program

否则,expect是你可以使用的大锤:

expect <<'END'
spawn ./my_interactive_program
set fh [open input.in r]
while {[gets $fh line] != -1} {
    send -- "$line\r"
}
close $fh
interact
END

答案 1 :(得分:0)

你能做的是制作一个输出所有输入的.sh文件(你还在我身边吗?:),询问用户输入,然后输出:

echo hello
echo world
read input
echo $input

然后运行该.sh文件并通过fortran程序管道输出。

答案 2 :(得分:0)

自动化交互式程序的灵活工具是expect。您可以使用它来向您的fortran程序提供任意输入(例如,从文件中读取并计算行数)。一旦你到达提示符,你发出命令interact并期望将控制传递给终端的标准输入。