Próbuję uruchomić casperjs na Ubuntu 12.04. Po instalacji po uruchomieniu dostaję:
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 jest więc obecny i działa, casperjs wskazuje właściwe miejsce i jest to skrypt Pythona. Ale kiedy go uruchamiam, pojawia się komunikat „Brak takiego pliku”.
Mogę to naprawić, zmieniając pierwszą linię pliku python casperjs z:
#!/usr/bin/env python
do:
#!/usr/bin/python
Wynik:
$ casperjs --version
1.1.0-DEV
Udało mi się to naprawić, ale zastanawiam się, dlaczego to nie działało #!/usr/bin/env python
, ponieważ wydaje się to normalną linią tłumacza. Czy mam coś źle skonfigurowanego?
Oto kroki, aby uzyskać 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
wersję niedziałającą? Byłoby pomocne, gdybyśmy mogli zobaczyć, które pliki env próbuje wykonać i czy env nie może znaleźć Pythona, czy python nie otwiera skryptu.: No such file or directory
wyjściem, które zawierają próbę wykonania. [edytuj: właśnie zobaczyłem odpowiedź Gillesa. Sprawdź, czy linie na wyjściu strace wyglądają takexecve("/usr/bin/python\r", ...)
. ]Odpowiedzi:
Jeśli zobaczysz błąd „: Brak takiego pliku lub katalogu” (bez żadnych znaków przed dwukropkiem), oznacza to, że linia shebang ma na końcu znak powrotu karetki, prawdopodobnie dlatego, że był edytowany w systemie Windows (który używa CR, LF jako separator linii). Znak CR powoduje, że kursor przesuwa się z powrotem na początek wiersza po tym, jak powłoka wypisuje początek komunikatu, dzięki czemu można zobaczyć tylko część po CR, która kończy ciąg interpretera, który jest częścią komunikatu o błędzie.
Usuń CR: linia shebang musi mieć końcówkę linii uniksowej (tylko wysuw linii ). Sam Python dopuszcza zakończenia linii CRLF, więc znaki CR w innych liniach nie boli. Z drugiej strony skrypty powłoki muszą być wolne od znaków CR.
Aby usunąć zakończenia linii Windows, możesz użyć dos2unix :
lub sed:
Jeśli musisz edytować skrypty w systemie Windows, użyj edytora, który radzi sobie z końcówkami linii uniksowych (tj. Czymś mniej mózgowym niż Notepad) i upewnij się, że jest skonfigurowany do zapisywania końcówek linii uniksowych (tj. Tylko LF) podczas edycji pliku uniksowego.
źródło
^M
na końcu. Jestem tutaj wyłącznie w Ubuntu, ale wciąż gedit czasami dodaje ^ M, więc poszedłem do Geany. W każdym razie spowoduje to inny błąd i nie jest to błąd, który widzę.^M
inny sposób na powiedzenie CR.#!/usr/bin/env python
(bez dodawania CR), będzie działać.\r
= Unicode U + 0D = ^ M (Ctrl + M), a LF =\n
= Unicode U + A0 = ^ J (Ctrl + J)Używam Visual Studio Code i jestem nowy w edytorze tekstu. Otrzymałem ten sam błąd i próbowałem ręcznie wykonać kroki opisane w tym poście, nie działało to dla mnie. Jednak w Visual Studio Code prawy dolny róg zapewnia opcję przełączania między CR i LF w locie, problem rozwiązany. Nie jestem pewien, czy to dotyczy, ale jeśli programujesz w edytorze tekstu, może on dostarczyć prostą odpowiedź, podając przycisk przełączania.
źródło