web-dev-qa-db-ja.com

最初の行に `#!/ usr / bin / env python`があると、スクリプトがpythonを見つけられない原因は何ですか?

Ubuntu 12.04でcasperjsを実行しようとしています。実行時にインストールすると、次のようになります。

09:20 $ ll /usr/local/bin/casperjs
lrwxrwxrwx 1 root root 26 Nov  6 16:49 /usr/local/bin/casperjs -> /opt/casperjs/bin/casperjs

09:20 $ /usr/bin/env python --version
Python 2.7.3

09:20 $ cat /opt/casperjs/bin/casperjs | head -4 
#!/usr/bin/env python

import os
import sys

09:20 $ casperjs
: No such file or directory

09: 22 $ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2

したがって、Pythonが存在し、実行可能であり、casperjsは正しい場所を指しており、pythonスクリプトです。しかし、実行すると「No such file」というメッセージが表示されます。

Casperjs pythonファイルの最初の行を次のように変更することで修正できます。

#!/usr/bin/env python

に:

#!/usr/bin/python

結果:

$ casperjs --version
1.1.0-DEV

私はそれを何とか修正しましたが、それが#!/usr/bin/env pythonで動作しなかった理由を疑問に思っています。何か間違った設定がありますか?

Casperjsを取得する手順は次のとおりです。

$ git clone git://github.com/n1k0/casperjs.git
$ cd casperjs
$ ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs
$ casperjs
: No such file or directory
19
jcollum

エラー:「No such file or directory」(コロンの前に何も表示されない)が表示される場合、シバン行の末尾に改行があることを意味します。これは、おそらくWindowsで編集されたためです(CR、LF行区切り記号)。 CR文字を使用すると、シェルがメッセージの先頭を印刷した後にカーソルが行の先頭に戻るため、エラーメッセージの一部であるインタープリター文字列を終了するCRの後の部分のみが表示されます。

CRを削除します。Shebang行にはUnix 行末 (改行のみ)が必要です。 Python自体はCRLF行末を許可するので、他の行のCR文字は傷つきません。一方、シェルスクリプトにはCR文字が含まれていない必要があります。

Windowsの行末を削除するには、 dos2unix を使用できます。

Sudo dos2unix /usr/local/bin/casperjs

またはsed:

Sudo sed -i -e 's/\r$//' /usr/local/bin/casperjs

Windowsでスクリプトを編集する必要がある場合は、Unixの行末(メモ帳よりも脳死の少ないもの)に対応するエディターを使用し、Unixの行末(つまりLFのみ)を書き込むように構成してくださいUnixファイルの編集。

35
Gilles

Visual Studio Codeを使用していますが、テキストエディターが初めてです。私は同じエラーを受け取り、この投稿の手順に従って手動で試しましたが、うまくいきませんでした。ただし、Visual Studio Codeの右下隅には、CRとLFをオンザフライで切り替えるオプションがあり、問題は解決しました。これが当てはまるかどうかはわかりませんが、テキストエディターでプログラミングしている場合は、切り替えるボタンを提供することで簡単な答えが得られる場合があります。

0
Gerald