"ruby myscript.rb" Works, "./myscript.rb" Doesn't


#1

I have a script. When I run it via “ruby myscript.rb”, it works great.
When I run it via “./myscript.rb”, it complains:

: No such file or directory.

The top of the file starts with “#!/usr/bin/env ruby”, which works for
other scripts in the same directory. I know it’s spelled right. And the
file is set executable.

The colon (":") at the start of the error message makes me think it’s
looking for a file with no name when it should be looking for my script.
Again, the script works great when run as a param to the “ruby…”
command.


#2

Did you “chmod +x” the script?


#3

Sorry. I just noticed that it is already executable.

What if you use the path straight to the ruby interpreter, and not
/usr/bin/env?


#4

wtf?

There isn’t any whitespace or blank lines before:

#!/usr/bin/ruby

is there?


#5

What if you use the path straight to the ruby interpreter, and not
/usr/bin/env?

Very interesting! When I change /usr/bin/env ruby to /usr/bin/ruby
(which is where the binary is), I get:

: bad interpreter: No such file or directory


#6

Michael G. wrote:

wtf?

I’m glad we’re on the same page. :slight_smile: Now I don’t feel so alone!

There isn’t any whitespace or blank lines before:

#!/usr/bin/ruby

is there?

nathan@vm1:~/public_html$ head -1 myscript.rb
#!/usr/bin/ruby
nathan@vm1:~/public_html$

Nada.


#7

Whenever I get weird messages like this it always turns out to be a
problem with line endings. By any chance did you last save the file on
a Windows system?


#8

Michael G. wrote:

/usr/bin/env?
Very interesting! When I change /usr/bin/env ruby to /usr/bin/ruby
(which is where the binary is), I get:

: bad interpreter: No such file or directory

Your script has been on a Windows box or otherwise polluted with a \r
(Carriage return) after ruby?

The kernel can’t find /usr/bin/ruby\r

-jonathan


#9

Your script has been on a Windows box or otherwise polluted with a \r
(Carriage return) after ruby?

That’s it, that’s the one. I had this problem with another script the
other day. It “went away” after I did a whole bunch of stuff. This
must’ve been it.

2006, and we’re still dealing with line endings :slight_smile:

How do I convert it?


#10

Nathan O. wrote:

Very interesting! When I change /usr/bin/env ruby to /usr/bin/ruby
(which is where the binary is), I get:

: bad interpreter: No such file or directory

Windows-style line endings?


#11

I saved it using nano and it’s working now.

Thanks, all!


#12

Nathan O. wrote:

How do I convert it?

Try dos2unix

-M