Попытка запустить casperjs на Ubuntu 12.04. После установки я получаю:
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. Но когда я запускаю его, я получаю «Нет такого файла».
Я могу это исправить, изменив первую строку файла python casperjs из:
#!/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
strace /usr/local/bin/casperjs
на неработающей версии? Было бы полезно, если бы мы могли видеть, какие файлы env пытается выполнить, и если env не может найти python или python не может открыть скрипт.: No such file or directory
выводом, которые содержат попытки execve. [править: только что увидел ответ Жиля. Проверьте строки в выводе strace, которые выглядят какexecve("/usr/bin/python\r", ...)
. ]Ответы:
Если вы видите сообщение об ошибке: «Нет такого файла или каталога» (без двоеточия), это означает, что ваша строка shebang имеет возврат каретки в конце, предположительно потому, что она была отредактирована в Windows (которая использует CR, LF в качестве разделитель строк). Символ CR заставляет курсор перемещаться обратно в начало строки после того, как оболочка напечатает начало сообщения, и поэтому вы можете увидеть только ту часть после CR, которая заканчивает строку интерпретатора, которая является частью сообщения об ошибке.
Удалите CR: строка shebang должна иметь конец строки Unix (только перевод строки). Сам Python допускает окончания строк CRLF, поэтому символы CR на других строках не помешают. Сценарии оболочки, с другой стороны, не должны содержать символов CR.
Чтобы удалить окончания строки Windows, вы можете использовать dos2unix :
или сед:
Если вам необходимо отредактировать сценарии в Windows, используйте редактор, который справляется с окончаниями строк Unix (то есть с чем-то менее умопомрачительным, чем Notepad), и убедитесь, что он настроен на запись окончаний строк Unix (т.е. только LF) при редактировании файла Unix.
источник
^M
в конце. Я здесь исключительно в Ubuntu, но Gedit иногда добавляет это ^ M, поэтому я пошел в Geany. В любом случае, это даст другую ошибку, и это не та ошибка, которую я вижу.^M
еще один способ сказать CR.#!/usr/bin/env python
(без добавления CR), оно будет работать.\r
= Unicode U + 0D = ^ M (Ctrl + M) и LF =\n
= Unicode U + A0 = ^ J (Ctrl + J)Я использую код Visual Studio и я новичок в текстовом редакторе. Я получал ту же ошибку и пытался вручную выполнить действия, описанные в этом сообщении, у меня это не сработало. Однако в правом нижнем углу кода Visual Studio предусмотрена возможность переключаться между CR и LF на лету, проблема решена. Я не уверен, применимо ли это, но если вы программируете в текстовом редакторе, он может дать простой ответ, предоставив кнопку для переключения.
источник