Tentando rodar o casperjs no Ubuntu 12.04. Depois de instalá-lo quando executo, recebo:
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
Portanto, o Python está presente e pode ser executado, o casperjs está apontando para o lugar certo e é um script python. Mas quando o executo, recebo "Esse arquivo não existe".
Posso corrigi-lo alterando a primeira linha do arquivo python casperjs de:
#!/usr/bin/env python
para:
#!/usr/bin/python
Resultado:
$ casperjs --version
1.1.0-DEV
Eu consegui consertá-lo, mas estou me perguntando por que não funcionou #!/usr/bin/env python
, já que parece ser uma linha de intérprete normal. Tenho algo configurado errado?
Aqui estão as etapas para obter o 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
na versão não útil? Seria útil se pudéssemos ver quais arquivos o env tenta executar, e se o env está falhando em encontrar python ou python está falhando em abrir o script.: No such file or directory
saída que contenham tentativas de execve. [editar: apenas vi a resposta de Gilles. Verifique se há linhas na saída strace que se parecemexecve("/usr/bin/python\r", ...)
. ]Respostas:
Se você vir o erro “: Não existe esse arquivo ou diretório” (sem nada antes dos dois pontos), significa que sua linha shebang possui um retorno de carro no final, provavelmente porque foi editada no Windows (que usa CR, LF como um separador de linha). O caractere CR faz com que o cursor volte ao início da linha depois que o shell imprime o início da mensagem e, portanto, você só consegue ver a parte após o CR que encerra a sequência do interpretador que faz parte da mensagem de erro.
Remova o CR: a linha shebang precisa ter uma linha Unix finalizada (apenas avanço de linha). O próprio Python permite terminações de linha CRLF, para que os caracteres CR em outras linhas não sejam prejudicados. Os scripts de shell, por outro lado, devem estar livres de caracteres CR.
Para remover as terminações de linha do Windows, você pode usar o dos2unix :
ou sed:
Se você precisar editar scripts no Windows, use um editor que lide com as terminações de linha do Unix (ou seja, com menos morte cerebral que o Bloco de Notas) e verifique se ele está configurado para gravar as terminações de linha do Unix (somente LF) ao editar um arquivo Unix.
fonte
^M
no final. Estou exclusivamente no Ubuntu aqui, mas ainda assim o gedit coloca esse ^ M às vezes, então fui para o Geany. De qualquer forma, isso dará um erro diferente e esse não é o erro que estou vendo.^M
outra maneira de dizer CR.#!/usr/bin/env python
(sem adicionar novamente um CR), ele funcionará.\r
= Unicode L + 0D ^ = M (+ M), e LF =\n
= Unicode L + A0 = ^ J (Ctrl + J)Estou usando o Visual Studio Code e sou novo no editor de texto. Eu estava recebendo o mesmo erro e tentei seguir as etapas manualmente neste post, não funcionou para mim. No entanto, no canto inferior direito do código do Visual Studio, é possível alternar entre CR e LF em tempo real, problema resolvido. Não tenho certeza se isso se aplica, mas se você estiver programando em um editor de texto, ele pode fornecer uma resposta simples, fornecendo um botão para alternar.
fonte