5

I prefere to invoke Ruby scripts with a hash bang line using #!/bin/env ruby which allows me to use a local Ruby installation without conflicting with the systems Ruby installation. But how can I enable warnings on Linux systems? My test script:

#!/usr/bin/env ruby -w

FOO

On Mac I get:

maasha@mel:~$ ./test.rb
./test.rb:3: warning: possibly useless use of a constant in void context
./test.rb:3:in `<main>': uninitialized constant FOO (NameError)

On Linux I get:

maasha@orsted:~$ ./test.rb
/usr/bin/env: ruby -w: No such file or directory
maasha
  • 1,926
  • 3
  • 25
  • 45
  • I have noted the possibility to set `export RUBYOPT=-w`, but I would like to avoid that if possible. – maasha Feb 21 '13 at 10:58
  • There is a thread on the topic on ruby forum: http://www.ruby-forum.com/topic/96121 – maasha Feb 21 '13 at 11:11
  • More on env and multiple arguments here: http://stackoverflow.com/questions/4303128/how-to-use-multiple-arguments-with-a-shebang-i-e – maasha Feb 21 '13 at 11:13

2 Answers2

3

#!/usr/bin/env RUBYOPT=-w ruby

As suggested in this answer, this answer, and other places

Community
  • 1
  • 1
ShadSterling
  • 1,792
  • 1
  • 21
  • 40
2

My first answer doesn't work on all systems, so here's another method: make your first non-comment line

$VERBOSE = true

which is What the -w switch does. From http://linux.die.net/man/1/ruby:

-v'

--verbose' Enables verbose mode. Ruby will print its version at the beginning, and set the variable $VERBOSE to true. Some methods print extra messages if this variable is true. If this switch is given, and no other switches are present, Ruby quits after printing its version.

-w' Enables verbose mode without printing version message at the beginning. It sets the $VERBOSE variable to true.

ShadSterling
  • 1,792
  • 1
  • 21
  • 40