Essayer de faire fonctionner casperjs sur Ubuntu 12.04. Après l'avoir installé lorsque je cours, j'obtiens:
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
Donc Python est présent et exécutable, casperjs pointe vers le bon endroit et c'est un script python. Mais lorsque je l'exécute, j'obtiens "Aucun fichier de ce type".
Je peux le corriger en changeant la première ligne du fichier python casperjs de:
#!/usr/bin/env python
à:
#!/usr/bin/python
Résultat:
$ casperjs --version
1.1.0-DEV
J'ai réussi à le réparer, mais je me demande pourquoi cela n'a pas fonctionné #!/usr/bin/env python
, car cela semble être une ligne d'interprétation normale. Ai-je quelque chose de mal configuré?
Voici les étapes pour obtenir des 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
sur la version non fonctionnelle? Serait utile si nous pouvions voir quels fichiers env tente d'exécuter, et si env ne parvient pas à trouver python ou python ne parvient pas à ouvrir le script.: No such file or directory
sortie qui contiennent des tentatives d'exécution. [edit: viens de voir la réponse de Gilles. Recherchez les lignes dans la sortie strace qui ressemblentexecve("/usr/bin/python\r", ...)
. ]Réponses:
Si vous voyez l'erreur ": aucun fichier ou répertoire" (sans rien avant les deux-points), cela signifie que votre ligne shebang a un retour chariot à la fin, probablement parce qu'il a été édité sous Windows (qui utilise CR, LF comme séparateur de ligne). Le caractère CR fait revenir le curseur au début de la ligne après que le shell imprime le début du message et donc vous ne voyez que la partie après CR qui termine la chaîne d'interprétation qui fait partie du message d'erreur.
Supprimez le CR: la ligne shebang doit avoir une fin de ligne Unix (saut de ligne uniquement). Python lui-même autorise les fins de ligne CRLF, donc les caractères CR sur les autres lignes ne font pas de mal. Les scripts shell d'autre part doivent être exempts de caractères CR.
Pour supprimer les fins de ligne Windows, vous pouvez utiliser dos2unix :
ou sed:
Si vous devez modifier des scripts sous Windows, utilisez un éditeur qui gère les fins de ligne Unix (c'est-à-dire quelque chose de moins mortel que le Bloc-notes) et assurez-vous qu'il est configuré pour écrire les fins de ligne Unix (c'est-à-dire LF uniquement) lors de la modification d'un fichier Unix.
la source
^M
à la fin. Je suis exclusivement dans Ubuntu ici mais gedit met parfois ça ^ M parfois, donc je suis allé à Geany. Quoi qu'il en soit, cela donnera une erreur différente et ce n'est pas l'erreur que je vois.^M
une autre façon de dire CR.#!/usr/bin/env python
(sans rajouter de CR), cela fonctionnera.\r
= Unicode U + 0D = ^ M (Ctrl + M), et LF =\n
= Unicode U + A0 = ^ J (Ctrl + J)J'utilise Visual Studio Code et je suis nouveau dans l'éditeur de texte. Je recevais la même erreur et j'ai essayé manuellement de suivre les étapes de ce message, cela n'a pas fonctionné pour moi. Cependant, dans le coin inférieur droit de Visual Studio Code, vous avez la possibilité de basculer entre CR et LF à la volée, problème résolu. Je ne sais pas si cela s'applique, mais si vous programmez dans un éditeur de texte, il peut fournir une réponse simple en fournissant un bouton pour basculer.
la source