【问题标题】:Cross-platform means of getting user's home directory in Ruby?在 Ruby 中获取用户主目录的跨平台方法?
【发布时间】:2019-03-14 11:38:02
【问题描述】:

Java 有方便的System.getProperty("user.home") 以独立于平台的方式获取用户的“主”目录。 Ruby 中的等价物是什么?我没有可以玩的 Windows 框,而且我觉得在文件名中依赖波浪号并不是最干净的方法。有替代品吗?

【问题讨论】:

    标签: ruby cross-platform


    【解决方案1】:

    对于 Ruby 1.9 及更高版本,您可以使用Dir.home

    【讨论】:

    • 此外,Dir.home('my_username') 将为您提供特定用户的主目录。
    【解决方案2】:

    File.expand_path 方法使用 Unix 约定对波浪号 (~) 进行特殊处理,因此~ 指的是当前用户的主目录,~foo 指的是foo 的主目录。

    我不知道是否有更好或更惯用的方式,但File.expand_path('~') 应该可以帮助您。

    【讨论】:

    • 在 Windows 上是这样吗?文档没有这样说明
    • 此页面上的所有内容都有效(至少在 Windows 7 上),但我认为 Dir.home 和使用波浪号似乎是最好的。
    【解决方案3】:

    这适用于所有操作系统

    • 对于当前用户
    Dir.home
    
    • 对于给定的用户
    Dir.home('username')
    

    注意:用户名在 Linux 上区分大小写,但在 Windows 或 macOS 上不区分

    【讨论】:

      【解决方案4】:

      在 unix 平台(linux、OS X 等)上,ENV["HOME"]File.expandpath('~')Dir.home 都依赖于设置的 HOME 环境变量。但有时您会发现环境变量未设置——如果您从启动脚本或某些批处理调度程序运行,这很常见。如果您处于这种情况,您仍然可以通过以下方式获取正确的主目录:

      require 'etc'
      Etc.getpwuid.dir
      

      话虽如此,由于这个问题要求使用“跨平台”方法,因此必须注意这在 Windows 上不起作用(Etc.getpwuid 将在那里返回 nil。)在 Windows 上,ENV["HOME"]并且上面提到的依赖它的方法将起作用,尽管HOME 变量在Windows 上通常不设置--在启动时,Ruby 将根据Windows 的HOMEPATHHOMEDRIVE 环境变量填充ENV["HOME"]。如果没有设置 windows HOMEDRIVEHOMEPATH 环境变量,那么这将不起作用。我不知道这在 Windows 环境中实际上有多普遍,而且我不知道有任何替代方法可以在 Windows 上运行。

      【讨论】:

      • 这是正确答案。感谢指向 etc 模块的指针。
      【解决方案5】:

      ENV["HOME"]ENV["HOMEPATH"] 应该会给你你想要的。

      homes = ["HOME", "HOMEPATH"]
      
      realHome = homes.detect {|h| ENV[h] != nil}
      
      if not realHome
         puts "Could not find home directory"
      end
      

      【讨论】:

      • 在 Windows 上是这样吗?
      • @davetron5000 这就是我的代码所做的,HOMEPATH 是仅在 Windows 上的环境变量。
      • 所以,基本上我们必须自己滚动它,没有系统调用来获取它?这对 Ruby 来说是奇怪的蹩脚……
      • HOMEPATH on Windows 不包括驱动器号 - 如果用户文件夹位于 D: 中,则无法使用。
      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 2010-10-25
      • 2023-02-23
      • 2011-02-02
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2017-08-11
      相关资源
      最近更新 更多