
端末で fortran77 プログラムを実行します。
./program
そしてプログラムには入出力ファイルが必要です。ファイルに入力ファイルと出力ファイルの名前がある場合(2つの列に分割されている)、端末に何を書くべきですか?ファイルに名前があるすべての行でこのプログラムを実行したいと思います。
または - パラメータなどの入力情報を使用してプログラムを実行する方法は?
または、スクリプトに直接ファイル名を書き込む方法はありますか?変える
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プログラム/コマンドは次のようになりたいです。オペランド入力ファイル/ストリームから1行ずつ:
$ <77.io cat
77in
77.out
これがcat
別の場合は、最初の行を入力ファイル(「hello \ nworld」など)として解析し、2行目を生成するファイルに解析します。
これはより新しくて簡単な方法のようです...
cp -a dir1 dir2 dest
今のように長いパラメータリストの代わりに<in_list cpa77
。
ただし、modernなどの追加ファイルが必要ですcpio
。
<filelist cpio -o >files.cpio
。もちろんcpio
STDINラインだけが必要です:
find . | cpio -o >files.cpio
(cpio
機能のため、この特別な呼び出し構文を使用すると、多くのファイルを処理できます。注文半分。同じtar
ですが、異なる方法で)
本質的にUnixの特徴の1つがあれば、すぐにシェルのコマンドに制御とデータを提供できる柔軟性です。私が言ったように:結局良いQです! (答えてくれてありがとう!)