12

コードからファイルを削除する必要がありFortranます。私はオンubuntu 12.04, x86_64です。以下に説明する手順が機能しない理由がわかりません。状況を明確にするのを手伝ってください(実際、一部のシステムでは機能しますが、私のシステムでは機能しません)。

別の方法があります: unix command を直接呼び出すことができますrm -f fileが、メソッドの何が問題なのか知りたいです。ありがとうございました。

ステップ 1. シンプルなスクリプト del.sh を作成し、~/bin に配置します。

$ cat del.sh
[ $# -ge 1 ] && rm -f $1
$ chmod u+x del.sh; mv del.sh ~/bin 

ステップ 2. Fortran コード、del.for:

character*100 cmd
character*30 file
call getarg(1,file)
write(cmd,100) file
100   format('source del.sh ',a30)
call system(cmd)
end

ステップ 3. コンパイルして実行します。

$ ifort -o del del.for
$ ./del file

結果:

sh: 1: source: not found

なにが問題ですか?単純な「ソース del.sh ファイル」は機能しますが、Fortran コードからは機能しません...混乱します。

Fortran コードから:

100 format('del.sh ',a30)
100 format('bash del.sh ',a30)

完璧に動作しますが、

100 format('sh del.sh ',a30)

動作しません。bashインストールしましたが、いいえcsh。ありがとうございました。

4

5 に答える 5

2

system呼び出しはシェルを呼び出してコマンドを実行します。このシェルはシステム/環境に依存します。を取得したため、呼び出されたシェルは組み込みのコマンドをsh: 1: source: not found理解していません。Ubuntu では、デフォルトで にリンクされています。代わりに、(ポータブル)ビルトインを使用します:sourcebash/bin/sh/bin/dash/bin/bashdashsource.source

100   format('. del.sh ',a30)

del.shがあなたの中にあれば、うまくいくはず$PATHです。

これが、これらがすべて機能するはずだと私が考える理由です。

100 format('sh del.sh ',a30)
100 format('bash del.sh ',a30)
100 format('del.sh ',a30)

しかし、あなたはそれを異なって持っていますか?その場合、私を打ちます:)

于 2013-09-07T10:04:45.410 に答える
1

したがって、シェル スクリプトでは、最初の行でプログラムを指定しません。追加してみてください:

#!/bin/bash

del.sh の最初の行として。それなしで bash が起動すると、期待どおりに /bin/bash ではなく、/bin/sh でスクリプトを実行している可能性があります。(今は確認できませんが、過去にbash固有のコードを使用していて、シバンを先頭に置くのを忘れた場合に問題が発生したことは知っています。)bashがその行で開始すると、代わりに bash で実行する必要があることを確認してください。あなたのコードは、それをbash引数として直接呼び出すことを示しているように見えるので、これで問題が解決するはずです。ではごきげんよう。

于 2013-09-07T01:57:57.863 に答える