Can a Ruby script tell what directory it’s in?

前端 未结 4 791
遇见更好的自我
遇见更好的自我 2021-02-04 22:53

Inspired by \"Getting the source directory of a Bash script from within\", what\'s the Ruby way to do this?

相关标签:
4条回答
  • 2021-02-04 23:33

    For older versions of Ruby (< 2.0), the script being run can be found using:

    • File.dirname(__FILE__) - relative path; or
    • File.expand_path(File.dirname(__FILE__)) - the absolute path.

    For newer versions of Ruby, try:

    • __dir__

    Using __dir__ will return the script path even after a call to Dir.chdir; whereas, using the older syntax may not return the path to the script.

    0 讨论(0)
  • 2021-02-04 23:34

    Use __dir__

    As of Ruby 2.0, __dir__ is the simplest way to get this. It

    Returns the canonicalized absolute path of the directory of the file from which this method is called.

    See the __dir__ documentation, and "Why is __FILE__ uppercase and __dir__ lowercase?".

    0 讨论(0)
  • 2021-02-04 23:50

    use __dir__

    File.dirname(__FILE__) is not a proper way to get directory where script is stored.

    At start working directory and directory with script file is the same, but it may change.

    For example:

    Dir.chdir('..') do
        puts __dir__
        puts File.expand_path(File.dirname(__FILE__))
    end
    

    for script file stored in /Desktop/tmp running it will give output

    /home/mateusz/Desktop/tmp
    /home/mateusz/Desktop
    
    0 讨论(0)
  • 2021-02-04 23:53

    ENV["PWD"] seems the simplest way for me under Linux. I don't know of an OS-agnostic way.

    0 讨论(0)
提交回复
热议问题