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上:
答案 0 :(得分:3)
如果您使用的是bash
(或类似名称),我认为echo -e
或printf
会很有用(但也请检查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”时,可以继续输入用引号引起来的字符串。