From: Robert Klemme Date: 2010-05-15T18:30:06+09:00 Subject: Re: difference between $0 and __FILE__ On 15.05.2010 10:33, Une Bévue wrote: > > i have a script in my HOME/bin : > > /Users/yt/bin/path_test.rb > > my "HOME/bin" is in the PATH > > then, if from this script, i outputs $0 and __FILE__ > > with : > > path_test.rb i got : > $0 = /Users/yt/bin/path_test.rb > __FILE__ = /Users/yt/bin/path_test.rb > > > and the same outputs with : > /Users/yt/bin/path_test.rb > > why do i have the same outputs in this case ? Because the shell will also expand full names. How does your PATH look like? I assume you set something like PATH="${PATH}:${HOME}/bin" - in that case you'll have the absolute path to ~/bin in your PATH and consequently the script is invoked with absolute path. > in fact i'm looking that because i do have Ruby class extension in a > subfolder of "HOME/bin", namely : > HOME/bin/ruby_ext > where i put my extension for classes of which i could require : > require "#{File.dirname($0)}/ruby_ext/ansi_color" > > what's the best way to require in that case, does i need an "absolute > path (starting from / ) or not ? IMHO the best way is to define a local location of library files and set RUBYLIB to that directory (I use "$HOME/lib/ruby" for that because I prefer to have lib code separate from programs, but in your case you could also use "$HOME/bin"). If you want to do it on a per script basis you could do this at the beginning of your script (i.e. before any requires): $:.unshift "/your/folder/here" Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/