我有一个fortran代码(由其他人写 - 不能改变它......),它接受一个输入参数文件,执行它,然后有一个交互式提示。这是它的工作原理:
[user@host] ./mycode
Welcome; what is the file name? _
一旦你给它param文件并点击回车,程序就会执行它并提示选项:
OPTIONS a=add something
u=undo
o=overplot
q=quit
然后,您与代码进行交互,然后退出。我遇到的问题是每次我退出程序并且必须重新开始时,我必须继续重新输入param文件名(这对于长名称来说是一种痛苦)。我想写一个简单的shell脚本:
./mycode_auto param_file
然后它将执行param_file并给出带有选项的提示。我的第一次天真的尝试,我知道它缺少了一些东西:
#!/bin/bash
./mycode << EOF
$1
EOF
它打开mycode
,执行param文件,但是在之后中断,我得到:
Fortran runtime error: End of file
我实际上可以理解它发生了什么,但不知道解决方法。有什么想法吗?
谢谢!
答案 0 :(得分:3)
如果您无法修改fortran程序,我相信您唯一的解决方案是使用expect。看看下面的脚本:
#!/usr/bin/expect -f
#we store the content of our 1st argument
set file_path [lindex $argv 0]
#process we need to interract with
spawn ./mycode
#if we encounter this message ...
expect "Welcome; what is the file name?" {
#... we send it our first argument
send "$file_path\r"
}
#we resume normal interaction with our script
interact
简单地称之为:script.expect "/path/to/file"
,假设期望脚本和mycode
位于同一文件夹中。