From: =?ISO-8859-1?Q?Une_B=E9vue?= on

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 ?

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 ?
--
� Je suis s�r que la ga�t� ambigu� du dr�le de gar�on qui a bu du
whisky et fait le z�bre sur un vieux ca�man � No�l dans le ca�on, a �t�
b�n�fique � l'�me du po�te bl�me, ainsi qu'� son c�ur & c�tera ! �
(� Jean-Paul Blanc)
From: Robert Klemme on
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/

From: =?ISO-8859-1?Q?Une_B=E9vue?= on
Robert Klemme <shortcutter(a)googlemail.com> wrote:

>
> 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 ?


OK, i see.

> 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"

fine thanks !
--
� Je suis s�r que la ga�t� ambigu� du dr�le de gar�on qui a bu du
whisky et fait le z�bre sur un vieux ca�man � No�l dans le ca�on, a �t�
b�n�fique � l'�me du po�te bl�me, ainsi qu'� son c�ur & c�tera ! �
(� Jean-Paul Blanc)