dav*_*000 57 ruby cross-platform
Java具有System.getProperty("user.home")以独立于平台的方式获取用户"home"目录的便利性.Ruby中的等价物是什么?我没有Windows框可以玩,我觉得依靠文件名中的波浪号并不是最干净的方式.还有替代品吗?
Jör*_*tag 82
该File.expand_path方法使用~特殊处理tilde()的Unix约定,以便~引用当前用户的主目录并~foo引用其foo主目录.
我不知道是否有更好或更惯用的方式,但File.expand_path('~')应该让你去.
Jac*_*kin 10
ENV["HOME"]或者ENV["HOMEPATH"]应该给你你想要的东西.
homes = ["HOME", "HOMEPATH"]
realHome = homes.detect {|h| ENV[h] != nil}
if not realHome
puts "Could not find home directory"
end
Run Code Online (Sandbox Code Playgroud)
Mic*_*cah 10
在unix平台(linux,OS X等)上ENV["HOME"],File.expandpath('~')或者Dir.home全部依赖于HOME正在设置的环境变量.但有时您会发现环境变量未设置 - 如果您从启动脚本或某些批处理调度程序运行,这种情况很常见.如果您遇到这种情况,您仍然可以通过以下方式获得正确的主目录:
require 'etc'
Etc.getpwuid.dir
Run Code Online (Sandbox Code Playgroud)
话虽如此,由于这个问题要求"跨平台"方法,必须注意这在Windows上不起作用(Etc.getpwuid将返回nil那里.)在Windows上,ENV["HOME"]上面提到的依赖它的方法会起作用,尽管HOME变量不常在Windows上设置 - 在启动时,Ruby将ENV["HOME"]根据窗口HOMEPATH和HOMEDRIVE环境变量填写.如果未设置窗口HOMEDRIVE和HOMEPATH环境变量,则此操作无效.我不知道在Windows环境中实际上有多常见,我不知道在Windows上有什么替代方案.
这适用于所有操作系统
Dir.home
Run Code Online (Sandbox Code Playgroud)
Dir.home('username')
Run Code Online (Sandbox Code Playgroud)
注意:用户名在Linux上区分大小写,但在Windows或macOS上不区分大小写
| 归档时间: |
|
| 查看次数: |
23298 次 |
| 最近记录: |