使用Expect进行交互式程序的部分自动化

时间:2015-03-09 16:53:03

标签: bash input automation expect

我有一个程序的可执行文件,用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。我尝试使用expect使用以下代码自动执行此操作:

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

当我从命令行手动运行时,一切正常。但是当我尝试将其添加到bash脚本文件并运行脚本时,它不起作用。这是我在bash脚本中写的:

#!/bin/bash

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

它只是回应:

spawn ./my_interactive_program

我有什么想法可以解决这个问题?难道我做错了什么? 非常感谢你。

1 个答案:

答案 0 :(得分:0)

bash脚本中的输入重定向阻止提供交互式输入 只需要没有bash,并制作一个你的工作代码的期望脚本:

#!/usr/bin/expect -f
spawn ./my_interactive_program 
set fh [open MBC4_Row1_Pitch1.in r]
while {[gets $fh line] != -1} {
    send -- "$line\r"
}
close $fh
interact