使用echo命令将值传递给交互式fortran程序

时间:2019-07-12 20:03:37

标签: fortran

fortran程序需要以交互方式传递三个输入:

第一个输入只是字母“ D”,第二个输入是文件“ A.cpt”,第三个输入是输出文件的名称,例如可以是“ B.out”。

我一直在尝试使用echo命令,但是它不起作用:

echo "D\nA.cpt\nB.out" | ./fortran_program 

有什么想法吗?

更新

使用EOF时,如下所示,程序将进入无限循环并重复以下行:

Please try again!
Please enter input binary hydra/quanta plot (old) filename
defaults <dotsurface_0_165.qpt> ext:<.qpt> (abort by EXIT or ^D) :  Sorry unable to open file: D.qpt
               or file: D
Please try again!
Please enter input binary hydra/quanta plot (old) filename
defaults <dotsurface_0_165.qpt> ext:<.qpt> (abort by EXIT or ^D) :  Sorry unable to open file: D.qpt

如果有帮助,此程序的源代码位于Github上:

https://github.com/osmart/hole2/blob/master/src/qpt_conv.f

2 个答案:

答案 0 :(得分:3)

如果您使用的是bash(或类似名称),我认为echo -eprintf会很有用(但也请检查this page)。例如,

echo -e "D\nA.cpt\nB.out" | ./a.out
printf "D\nA.cpt\nB.out" | ./a.out

给予

str(1) = D         
str(2) = A.cpt     
str(3) = B.out

(用于从下面的a.out生成的test.f90)。另一种方法可能是使用"here document",例如

./a.out <<EOF
D
A.cpt
B.out
EOF

我经常在bash脚本中使用

(因为输入部分更具可读性,并且看起来像一个单独的输入文件)。

!! test.f90
program main
    implicit none
    character(10) :: str( 3 )

    read *, str( 1 )
    read *, str( 2 )
    read *, str( 3 )

    print *, "str(1) = ", str(1)
    print *, "str(2) = ", str(2)
    print *, "str(3) = ", str(3)
end

答案 1 :(得分:0)

或者,您可以在echo命令中使用实际的换行符:

user@host$ echo "1                             
2
3" | ./test_echo 
           1           2           3
user@host$ 

echo "1之后键入“ enter”时,可以继续输入用引号引起来的字符串。