我在终端中运行 fortran77 程序
./program
并且程序要求输入和输出文件。当文件中有输入和输出文件的名称(分为两列)时,我应该向终端写入什么?我想对文件中带有名称的所有行运行该程序。
或者 - 如何使用参数等输入信息运行程序?
或者如何直接在脚本中写入文件名?代替
READ(+,'(A)') OUT
答案1
我制作了以下程序文件prog.f
program test
character IN*30,OUT*30,line*80
PRINT *,'Input file '
READ(*,'(A)') IN
OPEN(1,FILE=IN,STATUS='OLD')
PRINT *,'Output file?'
READ(*,'(A)') OUT
OPEN(2,FILE=OUT,STATUS='NEW',BLANK='ZERO')
read (1,'(a80)') line
write (2,*) "I read ", line
end
编译并链接它
gfortran prog.f -o prog
我将文本字符串放入输入文件中
echo "Hello World" > in
in
然后我将输入文件和输出文件的名称发送out
给程序
$ <<< 'in
out' ./prog
Input file
Output file?
并检查输出文件
$ cat out
I read Hello World
<<<
工作于bash
.您可能更喜欢echo
更便携的管道,
$ rm out
rm: remove normal file 'out'? y
$ echo 'in
out' | ./prog
Input file
Output file?
$ cat out
I read Hello World
答案2
如果你幸运的话也许
<infile ./program >outfile
将工作。重定向以提供文件描述符。选项/参数???
当我们地球人写出类似的东西时...
$ <77in cat >77.out
$ cat 77in >77.out
(这只是复制77in
到77.out
)
...这个 Fortran77 程序/命令想要它是操作数在一个输入文件/流中逐行:
$ <77.io cat
77in
77.out
现在,如果cat
是其他内容,它会将第一行解析为输入文件(例如包含“hello\nworld”),将第二行解析为要创建的文件。
这似乎只是更新、简单的方法......
而不是像cp -a dir1 dir2 dest
现在这样一个很长的参数列表<in_list cpa77
。
但是你需要一个额外的文件......就像现代一样cpio
:
<filelist cpio -o >files.cpio
。当然cpio
只需要 STDIN 行:
find . | cpio -o >files.cpio
(cpio
由于其功能,具有这种特殊的调用语法,可以处理许多文件。它是一个命令半。相同tar
,但方式不同)
如果说有什么是 Unix 的典型特征的话,那就是在 shell 中向命令提供控制和数据的灵活性。正如我评论的:毕竟是好Q! (感谢接受的答案!)