Cross-platform means of getting user's home directory in Ruby?

前端 未结 5 386
情深已故
情深已故 2021-02-03 16:47

Java has the convienient System.getProperty(\"user.home\") to get the user\'s \"home\" directory in a platform-independent way. What\'s the equivalent in Ruby? I

相关标签:
5条回答
  • 2021-02-03 17:36

    This works on all operating systems

    • For the current user
    Dir.home
    
    • For a given user
    Dir.home('username')
    

    Note: Username is case sensitive on Linux but not on Windows or macOS

    0 讨论(0)
  • 2021-02-03 17:41

    ENV["HOME"] or ENV["HOMEPATH"] should give you what you want.

    homes = ["HOME", "HOMEPATH"]
    
    realHome = homes.detect {|h| ENV[h] != nil}
    
    if not realHome
       puts "Could not find home directory"
    end
    
    0 讨论(0)
  • 2021-02-03 17:45

    The File.expand_path method uses the Unix convention of treating the tilde (~) specially, so that ~ refers to the current user's home directory and ~foo refers to foo's home directory.

    I don't know if there's a better or more idiomatic way, but File.expand_path('~') should get you going.

    0 讨论(0)
  • 2021-02-03 17:45

    On unix platforms (linux, OS X, etc), ENV["HOME"], File.expandpath('~') or Dir.home all rely on the HOME environment variable being set. But sometimes you'll find that the environment variable isn't set--this is common if you're running from a startup script, or from some batch schedulers. If you're in this situation, you can still get your correct home directory via the following:

    require 'etc'
    Etc.getpwuid.dir
    

    Having said that, since this question is asking for a "cross-platform" method it must be noted that this won't work on Windows (Etc.getpwuid will return nil there.) On Windows, ENV["HOME"] and the methods mentioned above that rely on it will work, despite the HOME variable not being commonly set on Windows--at startup, Ruby will fill in ENV["HOME"] based on the windows HOMEPATH and HOMEDRIVE environment variables. If the windows HOMEDRIVE and HOMEPATH environment variables aren't set then this won't work. I don't know how common that actually is in Windows environments, and I don't know of any alternative that works on Windows.

    0 讨论(0)
  • 2021-02-03 17:48

    With Ruby 1.9 and above you can use Dir.home.

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