Intentando ejecutar casperjs en Ubuntu 12.04. Después de instalarlo cuando ejecuto me sale:
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
Entonces, Python está presente y se puede ejecutar, casperjs apunta al lugar correcto y es un script de Python. Pero cuando lo ejecuto me sale "No existe ese archivo".
Puedo solucionarlo cambiando la primera línea del archivo python de casperjs de:
#!/usr/bin/env python
a:
#!/usr/bin/python
Resultado:
$ casperjs --version
1.1.0-DEV
Me las arreglé para arreglarlo, pero me pregunto por qué no funcionó #!/usr/bin/env python
, ya que parece ser una línea de intérprete normal. ¿Tengo algo mal configurado?
Estos son los pasos para obtener 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
la versión no funcional? Sería útil si pudiéramos ver qué archivos env intenta ejecutar, y si env no puede encontrar python o python no puede abrir el script.: No such file or directory
salida que contenga intentos de ejecución. [editar: acabo de ver la respuesta de Gilles. Verifique las líneas en la salida de strace que se parecenexecve("/usr/bin/python\r", ...)
. ]Respuestas:
Si ve el error ": No existe tal archivo o directorio" (sin nada antes de los dos puntos), significa que su línea shebang tiene un retorno de carro al final, presumiblemente porque fue editado en Windows (que usa CR, LF como separador de línea). El carácter CR hace que el cursor retroceda al comienzo de la línea después de que el shell imprime el comienzo del mensaje y, por lo tanto, solo puede ver la parte después de CR que finaliza la cadena de intérprete que es parte del mensaje de error.
Elimine el CR: la línea shebang debe tener un final de línea Unix (solo salto de línea). Python mismo permite terminaciones de línea CRLF, por lo que los caracteres CR en otras líneas no duelen. Los scripts de shell, por otro lado, deben estar libres de caracteres CR.
Para eliminar las terminaciones de línea de Windows, puede usar dos2unix :
o sed:
Si debe editar scripts en Windows, use un editor que haga frente a los finales de línea de Unix (es decir, algo menos mortal que el Bloc de notas) y asegúrese de que esté configurado para escribir finales de línea de Unix (es decir, solo LF) al editar un archivo Unix.
fuente
^M
final. Estoy exclusivamente en Ubuntu aquí pero todavía gedit pone ese ^ M a veces, así que fui a Geany. De todos modos, dará un error diferente y ese no es el error que estoy viendo.^M
otra forma de decir CR.#!/usr/bin/env python
(sin volver a agregar un CR), funcionará.\r
= Unicode U + 0D = ^ M (Ctrl + M), y LF =\n
= Unicode U + A0 = ^ J (Ctrl + J)Estoy usando Visual Studio Code y soy nuevo en el editor de texto. Estaba recibiendo el mismo error e intenté seguir manualmente los pasos en esta publicación, no funcionó para mí. Sin embargo, en Visual Studio Code, la esquina inferior derecha proporciona una opción para cambiar entre CR y LF sobre la marcha, problema resuelto. No estoy seguro de si esto se aplica, pero si está programando en un editor de texto, puede proporcionar una respuesta simple al proporcionar un botón para cambiar.
fuente