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

Bash 如何在交互式程序中使用输入重定向和手动输入?,bash,input,io-redirection,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_inte

我有一个程序的可执行文件,用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
因此,它不是等待键盘输入,而是检测文件的结尾,程序崩溃。
我能做些什么吗?

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

echo hello
echo world
read input
echo $input

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

如果您可以要求用户预先输入第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

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

我想在Bash中读取输入,然后将两者都传送到程序是不可取的。谢谢,但我认为这不会有帮助。我已经修改了原来的问题,所以现在可能更清楚我想做什么以及为什么我需要它。如果你用“cat输入”替换前两个回声,我想你会得到你需要的。我已经尝试了这里提到的所有东西,但没有任何效果。“期望”似乎很有希望,但却没有。我安装了它,并试图运行上面提到的代码,但它似乎没有开始工作。。。它只打印:“生成/我的交互式程序”。我不知道怎么了。我还试图只启动程序,没有任何输入,但这也不起作用。有什么想法吗?非常感谢。我曾尝试使用上面建议的代码,但我再次遇到问题。当我在终端中从命令行运行它时,一切都正常运行。但是,当我将其添加到bash脚本时,它不会运行。。。请注意,我不包括该部分“
expect <<'END'
spawn ./my_interactive_program
set fh [open input.in r]
while {[gets $fh line] != -1} {
    send -- "$line\r"
}
close $fh
interact
END