Finding path to ruby script argument

When I execute a ruby script by the following:

ruby helloworld.rb onlyarg

How can I find what equals?

For example, in Windows, ruby C:\scripts\helloworld.rb onlyarg

helloworld.rb:

What can I put here to display the value C:\scripts\ or C:\scripts?

puts ARGV[0]

output:

onlyarg

Thanks!

Matthew

i.e. not from current directory, but without specifying its path.
Also, and i haven’t even bothered to test this, but if it’s similar to
PHP’s FILE variable, it’s the current file… so require a file, call
a
method in that file, and access FILE in that method and you’re gonna
get your required file, not the initial one…

-philip

Matthew H. wrote:

ruby C:\scripts\helloworld.rb

helloworld.rb:

What can I put here to display the value C:\scripts\ or C:\scripts?

puts $0
puts FILE

There should be two underscores on each side of FILE, as the
original poster had it.

On 1/11/07, Matthew H. [email protected] wrote:

When I execute a ruby script by the following:

ruby helloworld.rb onlyarg

How can I find what equals?

The constant FILE will contain the full path to the currently
executing file.

Justin

Excellent! Thanks.

Looks like FILE and $0 are the same.

Thanks for the clarification on FILE,

Matthew

ruby C:\scripts\helloworld.rb

helloworld.rb:

What can I put here to display the value C:\scripts\ or C:\scripts?

puts $0
puts FILE
puts ARGV[0]

output:

C:/scripts/helloworld.rb
C:/scripts/helloworld.rb:3: undefined local variable or method
`FILE’ for main:Object (NameError)

ruby C:\scripts\helloworld.rb

helloworld.rb:

What can I put here to display the value C:\scripts\ or C:\scripts?

puts $0
puts ARGV[0]

output:

C:/scripts/helloworld.rb
onlyarg


I found the $0 documented in the
http://www.rubycentral.com/book/rubyworld.html page.

Justin, how would you recommend me using the FILE constant?

Thanks,

Matthew

“Justin B.” [email protected] writes:

On 1/11/07, Matthew H. [email protected] wrote:

When I execute a ruby script by the following:

ruby helloworld.rb onlyarg

How can I find what equals?

The constant FILE will contain the full path to the currently
executing file.

s/constant/keyword/

helloworld.rb:

puts $0
puts FILE
puts File.dirname($0)
puts ARGV[0]
puts File.expand_path(FILE)
puts File.expand_path($0)

require ‘includeme.rb’

tempvar = IncludeMe.new
tempvar.runme

includeme.rb:

class IncludeMe
def runme
puts “includeme.rb”
puts FILE
puts $0
puts “end includeme.rb”
end
end

command:

ruby helloworld.rb onlyarg

output:

helloworld.rb
helloworld.rb
.
onlyarg
C:/scripts/helloworld.rb
C:/scripts/helloworld.rb
includeme.rb
./includeme.rb
helloworld.rb
end includeme.rb


Looks like out of the originally invoked rb script, the whole path is
lost. I would have to assign the value to a global variable if I
needed to preserve it to all scripts.

Matthew

On 1/11/07, Matthew H. [email protected] wrote:

Looks like FILE and $0 are the same.

Not necessarily… when running a script under rcov or similar, they
may differ (for example one starts with ./ while the other does not).
That’s why I write the if FILE == $0 idiom as

if File.expand_path(FILE) == File.expand_path($0)

Another possibility might be is when you start the script using $PATH,
i.e. not from current directory, but without specifying its path.

When I execute a ruby script by the following:

ruby helloworld.rb onlyarg

How can I find what equals?

$0 will give you the full string… then use chop it up using dirname to
get the directory…

% cat foo.rb
puts File.dirname($0)
% ruby /Users/philip/foo.rb
/Users/philip