Trying to get casperjs running on Ubuntu 12.04. After installing it when I run I get:
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
So Python is present and runnable, casperjs is pointing to the right place and it is a python script. But when I run it I get "No such file".
I can fix it by changing the first line of the casperjs python file from:
#!/usr/bin/env python
to:
#!/usr/bin/python
Result:
$ casperjs --version
1.1.0-DEV
I managed to fix it, but I'm wondering why it didn't work with #!/usr/bin/env python, since that seems to be a normal interpreter line. Do I have something configured wrong?
Here are the steps to get 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
2 Answers 2
If you see the error ": No such file or directory" (with nothing before the colon), it means that your shebang line has a carriage return at the end, presumably because it was edited under Windows (which uses CR,LF as a line separator). The CR character causes the cursor to move back to the beginning of the line after the shell prints the beginning of the message and so you only get to see the part after CR which ends the interpreter string that's part of the error message.
Remove the CR: the shebang line needs to have a Unix line ending (linefeed only). Python itself allows CRLF line endings, so the CR characters on other lines don't hurt. Shell scripts on the other hand must be free of CR characters.
To remove the Windows line endings, you can use dos2unix:
sudo dos2unix /usr/local/bin/casperjs
or sed:
sudo sed -i -e 's/\r$//' /usr/local/bin/casperjs
If you must edit scripts under Windows, use an editor that copes with Unix line endings (i.e. something less brain-dead than Notepad) and make sure that it's configured to write Unix line endings (i.e. LF only) when editing a Unix file.
-
I've run into this issue but it always has an
^Mat the end. I'm exclusively in Ubuntu here but still gedit puts that ^M in sometimes, so I went to Geany. Anyway it will give a different error and that's not the error that I'm seeing.jcollum– jcollum2013年11月07日 21:17:26 +00:00Commented Nov 7, 2013 at 21:17 -
1@jcollum
^Manother way to say CR.Gilles 'SO- stop being evil'– Gilles 'SO- stop being evil'2013年11月07日 21:18:16 +00:00Commented Nov 7, 2013 at 21:18 -
Yes I understand that but what I'm saying is that I'm not getting that error any longer, so it's not a line break issue.jcollum– jcollum2013年11月07日 21:25:25 +00:00Commented Nov 7, 2013 at 21:25
-
@jcollum You removed the CR when you edited the shebang line. If you change it back to
#!/usr/bin/env python(without adding back a CR), it will work.Gilles 'SO- stop being evil'– Gilles 'SO- stop being evil'2013年11月07日 21:31:15 +00:00Commented Nov 7, 2013 at 21:31 -
3Note for anyone confused about terminology: CR =
\r= Unicode U+0D = ^M (Ctrl+M), and LF =\n= Unicode U+A0 = ^J (Ctrl+J)wjandrea– wjandrea2017年05月20日 20:59:58 +00:00Commented May 20, 2017 at 20:59
I am using Visual Studio Code and am new to the text editor. I was receiving the same error and tried manually following steps in this post, it did not work for me. However, in Visual Studio Code bottom right corner provides an option to switch between CR and LF on the fly, problem solved. I am not sure if this applies but if you are programming in a text editor it may provide a simple answer by providing a button to switch.
strace /usr/local/bin/casperjson the nonworking version? Would be helpful if we could see which files env tries to exec, and whether env is failing to find python or python is failing to open the script.: No such file or directorybeing output that contain attempted execve's. [edit: just saw Gilles' answer. Check for lines in the strace output that look likeexecve("/usr/bin/python\r", ...). ]