I'm running Ruby on Windows though I don't know if that should make a difference. All I want to do is get the current working directory's absolute path. Is this possible from irb? Apparently from a script it's possible using File.expand_path(__FILE__)
But from irb I tried the following and got a "Permission denied" error:
File.new(Dir.new(".").path).expand
Dir.pwd
) or do you want the directory where the currently running script is located (which is File.dirname(__FILE__)
)? Imagine calling a script from anywhere else (like ruby testdirectory/testscript.rb
) here, the two will be different!
File.expand_path(__FILE__)
" - because __FILE__
's location is a different animal than current working dir (which is Dir.pwd
).
File.expand_path(__FILE__)
does not "get the current working directory's absolute path".
File.expand_path File.dirname(__FILE__)
will return the directory relative to the file this command is called from.
But Dir.pwd
returns the working directory (results identical to executing pwd
in your terminal)
Dir.pwd
is equivalent to pwd -P
. exec('pwd -L')
will get the equivalent of pwd in the terminal (pwd is normally a bash builtin, and doesn't resolve symbolic links).
bundle exec rspec spec
in directory '/project', while in file 'spec/spec_helper.rb', the value of Dir.pwd
will still be '/project'.
As for the path relative to the current executing script, since Ruby 2.0 you can also use
__dir__
So this is basically the same as
File.dirname(__FILE__)
__FILE__
is a constant but __dir__
is a method.
This will give you the working directory of the current file.
File.dirname(__FILE__)
Example:
current_file: "/Users/nemrow/SITM/folder1/folder2/amazon.rb"
result: "/Users/nemrow/SITM/folder1/folder2"
Dir.pwd
and your suggestion might potentially differ.
Through this you can get absolute path of any file located in any directory.
File.join(Dir.pwd,'some-dir','some-file-name')
This will return
=> "/User/abc/xyz/some-dir/some-file-name"
If you want to get the full path of the directory of the current rb file:
File.expand_path('../', __FILE__)
Success story sharing
pwd
), which might be somewhere completely different than where the script file is located.