views:

292

answers:

5

I'm on OS X (with bash) and a newbie at unix. I want to know if it's possible to amend some file such that to run a ruby program, I don't need "ruby file.rb", but instead can just run "ruby.rb".

Is there a reason NOT to do this?

Thanks!

+4  A: 

chmod +x /path/to/file

No reason not to do it, as long as you prefix the interpreter with a shebang (#!/usr/local/ruby or whatever the path is on OSX). The shell doesn't care.

phresus
+6  A: 

Yes you can do this.

Assuming ruby.rb has something like this in it:

#!/usr/bin/env ruby
puts 'Hello world'

At the command line: chmod +x ruby.rb

This makes it executable.

Then you can execute it like this:

./ruby.rb

For more details see wikibooks.

EDIT (Jörg W Mittag): Using #!/usr/bin/env ruby instead of #!/usr/bin/ruby as the shebang line is more portable, because on every Unix produced in the last 20 years, the env command is known to live in /usr/bin, whereas Ruby installations are typically all over the place. (E.g., mine lives in /home/joerg/jruby-1.2.0/bin/ruby.)

NoahD
+1  A: 

Place the correct shebang as the first line of your file. ex:

#!/usr/bin/ruby

in the shell, make the file executable

chmod +x file
sdellysse
+3  A: 

As others have mentioned, you want to have a shebang (#!) line at the beginning, and change the permissions to executable.

I would recommend using #!/usr/bin/env ruby instead of the path to Ruby directly, since it will make your script more portable to systems that may have Ruby installed in different directories; env will search in your search path, and so it will find the same Ruby that you would execute if you ran ruby on the command line. Of course, this will have problems if env is in a different location, but it is much more common for env to be at /usr/bin/env than for Ruby to be at /usr/bin/ruby (it may be in /usr/local/bin/ruby, /opt/bin/ruby, /opt/local/bin/ruby, etc)

#!/usr/bin/env ruby
puts "Hello!"

And make it executable:

chmod +x file.rb
Brian Campbell
+1 for making sure your shebang line will use whatever Ruby is in your path. When you upgrade, it sometimes puts the new version in a completely different place than the current install.
Sarah Mei
Yep, that's why I posted this; the question was already answered by several people, but I felt like it's important to mention /usr/bin/env for that reason.
Brian Campbell
A: 

If you want to do anything more complicated with running this application, you can always create a shell script:

#! /bin/sh
ruby ruby.rb

If you save it to run_script, you just have to chmod +x it as mentioned previously, then execute the following command:

$ ./run_script

I doubt this will be any more useful in your particular situation than the solutions already mentioned, but it's worth noting for completeness's sake.

Jason Baker