我有一个程序的可执行文件,用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
因此,它不是等待键盘的输入,而是检测文件的结尾,程序崩溃。 我能为此做些什么吗?
答案 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
并期望将控制传递给终端的标准输入。