Fortran代码的{b}包装器

时间:2017-07-20 13:56:47

标签: bash shell heredoc

我有一个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

我实际上可以理解它发生了什么,但不知道解决方法。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您无法修改fortran程序,我相信您唯一的解决方案是使用。看看下面的脚本:

#!/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位于同一文件夹中。