0

にいくつかのpythonファイルがあり、それらをsambawindowsで転送します。gentoo

私はそれらのモードが実行可能であることを確認し、./xxx.pyそれを実行するために使用しましたが、エラーが発生しました:

: そのようなファイル、又はディレクトリはありません

ここにないファイルが表示されないのは困ります。

しかし、私が使用するpython xxx.pyと、正しい方法で実行できます。

set ff次に、vimで使用してCR文字を確認し、それが であることを確認し、dos使用set ff=unixして設定しました。./xxx.py

python xxx.pyしかし、なぜそれがいつ使用できるのかわかりませんかff=dos

4

2 に答える 2

3

Windows の行末は CRLF または\r\n.

Unix は単純に を使用します\n

OS がシバン行を読み取ると、#!/usr/bin/python\r. このコマンドは実行できません。

UNIX シェルからこの動作を確認する簡単な方法は、 (コマンドとして$(echo -e 'python\r')実行しようとする) ことです。python\rこの出力も に似てい: command not foundます。

Windows の高度なコード エディターの多くは、UNIX の行末での保存をネイティブにサポートしています。

于 2012-12-02T12:11:04.277 に答える
2

DOS ファイルは CR+LF で行を終了し、Unix ファイルは LF だけで終了します。これは、Unix がファイルを読み取って実行可能ファイルの名前を特定するときに、その実行可能ファイルの名前が CR で終わることを意味します。そのようです:

#!/usr/bin/python

print("Blah!")

それを実行すると、次のようになります。

$ ./test.py 
bash: ./test.py: /usr/bin/python^M: bad interpreter: No such file or directory

あなたの場合、CR 文字 (上記の ^M) は出力されず、端末によって「実行」されます。つまり、カーソルは行頭に戻ります。したがって、^M の前のすべてが上書きされます。

$ ./test.py 

: インタープリターが正しくありません: そのようなファイルまたはディレクトリはありません

これが、Unix 上で DOS ファイルで終わるファイルを実行できない理由です。

遠く離れた最新のソース管理システムでさえ、これを処理し、ソースをチェックアウトするときにファイルの末尾を変更します。

于 2012-12-02T12:16:01.653 に答える