对于Ruby CLI,将目录更改为用户根/主目录的最可靠方法是什么?

对于Ruby CLI,将目录更改为用户根/主目录的最可靠方法是什么?,ruby,command-line-interface,Ruby,Command Line Interface,真的,我不确定在运行命令之前是否要求用户确保他们在自己的主目录中,如果没有,则中止,或者只是更改他们的目录 Dir.chdir无参数默认为用户主目录,当块完成时返回上一个目录 Dir.chdir do puts Dir.pwd end puts Dir.pwd # => 'Users/Brian' # => '/Users/Brian/gems/etc...' 在整个代码中,我需要chdir多次。这很可靠吗 有人知道做这种事情的最佳方法吗?总结一下 如果您使用的是大于1

真的,我不确定在运行命令之前是否要求用户确保他们在自己的主目录中,如果没有,则中止,或者只是更改他们的目录

Dir.chdir
无参数默认为用户主目录,当块完成时返回上一个目录

Dir.chdir do 
  puts Dir.pwd
end

puts Dir.pwd

# => 'Users/Brian'

# => '/Users/Brian/gems/etc...'
在整个代码中,我需要
chdir
多次。这很可靠吗

有人知道做这种事情的最佳方法吗?

总结一下

如果您使用的是大于1.9的Ruby版本,
Dir
模块提供了一个方法
#home
。但是,这取决于在用户的shell会话上设置的环境变量
HOME
。为了可靠地获取home dir,您应该将当前用户的登录名传递给
dir.home
命令。或者,在代码中:

# Works if HOME is set in the environment i.e., if "echo $HOME" returns the home directory
# when that command is run on the command-line
Dir.home     # => /Users/<username>, Works if HOME is set

# If the HOME environment variable is not set, you should explicitly pass in the username
# of the currently logged-in user
Dir.home(username)     # => /Users/<username>

# The current username can be obtained using
username = `whoami`

# or

require 'etc'
username = Etc.getlogin
#如果在环境中设置了HOME,即“echo$HOME”返回HOME目录,则工作
#在命令行上运行该命令时
Dir.home#=>/Users/,如果设置了home,则可以工作
#如果未设置HOME环境变量,则应显式传入用户名
#当前登录用户的名称
目录主页(用户名)#=>/用户/
#当前用户名可以通过以下方式获得:
用户名=`whoami`
#或
要求“等”
username=Etc.getlogin
最后一个警告:这在*nix上有效