I’d like getting the name of the script in use, if i make use of $0 i
get the whole path of the script, ie :
/path/to/script/the_script.rb
no way to get only “the_script.rb”
(without using file basename ?)
I’d like getting the name of the script in use, if i make use of $0 i
get the whole path of the script, ie :
/path/to/script/the_script.rb
no way to get only “the_script.rb”
(without using file basename ?)
Try FILE
Michael G. wrote:
no way to get only “the_script.rb”
(without using file basename ?)
une bévue
In the executed script, FILE will contain the same as $0. Cf the “if
$0 == FILE main() end” idiom.
What’s wrong with using basename again?
David V.
On 9/30/06, David V. [email protected] wrote:
/path/to/script/the_script.rb
no way to get only “the_script.rb”
(without using file basename ?)
une bévue
In the executed script, FILE will contain the same as $0. Cf the “if
$0 == FILE main() end” idiom.
Doh. Silly me, I was running it from . so no path was being added…
What’s wrong with using basename again?
Une bévue wrote:
nothing at all, i was dreaming of a direct way to gzt thz script name
alone (for the usage message)…
I think this is pretty direct: File.basename($0) … perhaps you meant
immediate?
Regards,
Jordan
David V. [email protected] wrote:
In the executed script, FILE will contain the same as $0. Cf the “if
$0 == FILE main() end” idiom.
ok, thanks.
What’s wrong with using basename again?
nothing at all, i was dreaming of a direct way to gzt thz script name
alone (for the usage message)…
Une bévue wrote:
yes ! i knew File.basenamepath)…
I know…I saw your first post. But that seems very direct to me. I
think you meant immediate, i.e., without calling a method. There is no
way to do that, that I know of anyway, but you can always do it
yourself (you could even make a file just for that):
$base = File.basename($0)
require ‘direct’
puts $base
I do something similar to find the real path of a script:
$realpath = File.expand_path($0)
if File.symlink?($realpath)
$realpath = File.readlink($realpath)
end
$realpath = File.dirname($realpath)
require ‘realpath’
puts $realpath
Regards,
Jordan
MonkeeSage [email protected] wrote:
puts $base
in ruby what’s the meaning of “$” before base ?
a way to get it as global var ?
$realpath = File.dirname($realpath)
somethingelse.rb
require ‘realpath’
puts $realpath
Right, nice idae, i do have a folder “rb” in my HOME/bin where i put
some small ruby scripts like that and some ruby object extension such as
string.
quit frankly i was wrong i’ve believe the behaviour of shell scripts is
different then, i’ve made a riny test in zsh (my prefered shell) :
#!/usr/bin/env zsh
echo $0
exit 0
and i get, as for ruby :
~%> zsh echo_dollard_9.zsh
/Users/yvon/work/zsh/echo_dollard_0.zsh
)))))
MonkeeSage [email protected] wrote:
I think this is pretty direct: File.basename($0) … perhaps you meant
immediate?
yes ! i knew File.basenamepath)…
MonkeeSage [email protected] wrote:
Well, you were right and wrong.
If you run that script (or a ruby
script) from the directory where it lives at, you get just the filename
in $0, since the base path is ‘.’; but cd … and run it, and then
you’ll get a full path. Confusing?
not at all.
a question apart from that (but linked to)
my script “direct.rb” lies in ~/bin/rb
when using it i do :
require ‘/Users/yvon/bin/rb/direct.rb’
or :
require “ENV[‘HOME’]/bin/rb/direct.rb”
which isn’t “direct” )))
my ENV[‘HOME’]/bin is in my PATH
i know also their is a LOAD_PATH within Ruby.
then, the question :
what kind of var i’ve to setup in order to be able to write :
require ‘direct’
and avoiding warnings of rubygems ???
notice i don’t want my “~/bin/rb” being in the PATH…
Une bévue wrote:
what kind of var i’ve to setup in order to be able to write :
require ‘direct’
and avoiding warnings of rubygems ???
notice i don’t want my “~/bin/rb” being in the PATH…
Two ways:
require ‘rbconfig’
puts Config::CONFIG[‘rubylibdir’]
puts Config::CONFIG[‘sitelibdir’]
It is conventional (and easier to maintain) to put user scripts into
site_lib.
OR
$: << ‘/some/dir’ unless $:.include?(’/some/dir’)
require ‘direct’
HTH,
Jordan
MonkeeSage [email protected] wrote:
site_lib.
OR
- Add something like this to every script where you want to require
direct.rb:$: is an alias for $LOAD_PATH
$: << ‘/some/dir’ unless $:.include?(‘/some/dir’)
require ‘direct’
may be their is a third way (using symlinks) ?
not working at the time being it seems ruby isn’t following symlinks
i did a :
~%> sudo mkdir /opt/local/lib/ruby/site_ruby/1.8/yt
and then :
~%> sudo ln -s direct.rb /opt/local/lib/ruby/site_ruby/1.8/yt/direct
testing this :
— direct_test.rb -----------------------------------------------------
require ‘yt/direct’
i get :
direct_test.rb
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
gem_original_require': no such file to load -- yt/direct (LoadError) from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
require’
from /Users/yvon/bin/direct_test.rb:3
~/bin/rb%>
the path is correct because using :
— ruby_libs_dir.rb ---------------------------------------------------
#!/usr/bin/env ruby -w
i get :
~b%> ruby_libs_dir.rb
/opt/local/lib/ruby/1.8
/opt/local/lib/ruby/site_ruby/1.8
then i must conclude ruby isn’t following symlinks (?) then no third
solution.
the reason, for me, using this kind of solution it’s because i have two
installed ruby (apart from the one installed by default by Apple) :
one in /opt/local… (darwinports)
another installed in my HOME fo JRuby
then , i’d like avoiding copying scripts in different locations.
Hi Une,
Une bévue wrote:
in ruby what’s the meaning of “$” before base ?
a way to get it as global var ?
Yes, that’s correct. So $0 is actually global variable named “0”.
quit frankly i was wrong i’ve believe the behaviour of shell scripts is
different then, i’ve made a riny test in zsh (my prefered shell) :
Well, you were right and wrong. If you run that script (or a ruby
script) from the directory where it lives at, you get just the filename
in $0, since the base path is ‘.’; but cd … and run it, and then
you’ll get a full path. Confusing?
Regards,
Jordan
MonkeeSage [email protected] wrote:
Try adding a .rb to the symlink:
sudo rm -f /opt/local/lib/ruby/site_ruby/1.8/yt/direct
sudo ln -s direct.rb /opt/local/lib/ruby/site_ruby/1.8/yt/direct.rb
NOPE :[
i even try putting an alias file (from folder /Users/yvon/bin/rb) named
“yt” into “/opt/local/lib/ruby/site_ruby/1.8” but this too don’t work…
i’ll stay to your first way solution and do another cp for JRuby )))
Une bévue wrote:
NOPE :[
OK, you need to do an absolute symlink and it should work:
sudo rm -f /opt/local/lib/ruby/site_ruby/1.8/yt/direct.rb
sudo ln -s /FULL/PATH/TO/direct.rb
/opt/local/lib/ruby/site_ruby/1.8/yt/direct.rb
Regards,
Jordan
Une bévue wrote:
~%> sudo ln -s direct.rb /opt/local/lib/ruby/site_ruby/1.8/yt/direct
Try adding a .rb to the symlink:
sudo rm -f /opt/local/lib/ruby/site_ruby/1.8/yt/direct
sudo ln -s direct.rb /opt/local/lib/ruby/site_ruby/1.8/yt/direct.rb
Regards,
Jordan
MonkeeSage [email protected] wrote:
OK, you need to do an absolute symlink and it should work:
sudo rm -f /opt/local/lib/ruby/site_ruby/1.8/yt/direct.rb
sudo ln -s /FULL/PATH/TO/direct.rb
/opt/local/lib/ruby/site_ruby/1.8/yt/direct.rb
fine, thanks a lot , that works prety well !
MonkeeSage wrote:
$: is an alias for $LOAD_PATH
Ps. Changing $LOAD_PATH does not effect ENV[‘PATH’] at all (either from
inside ruby or from the shell).
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs