如何使用'〜'指定文件路径在Ruby?

时间:2015-01-22 07:33:15

标签: ruby macos

如果我这样做:

require 'inifile'

# read an existing file
file = IniFile.load('~/.config')
data = file['profile'] # error here

puts data['region']

我在这里收到错误:

t.rb:6:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)

如果我指定一个绝对路径,它就会消失:

file = IniFile.load('/User/demo1/.config')

但我不想硬编码位置。如何在Ruby中将~解析为路径?

2 个答案:

答案 0 :(得分:4)

Ruby有一种针对这种情况的方法。它是File::expand_path

  

将路径名转换为绝对路径名。除非给出dir_string,否则从进程的当前工作目录引用相对路径,在这种情况下,它将用作起始点。给定的路径名​​可以以“〜”开头,它扩展到进程所有者的主目录(必须正确设置环境变量HOME)。 “~user”扩展到指定用户的home目录。

require 'inifile'

# read an existing file
file = IniFile.load(File.expand_path('~/.config'))

答案 1 :(得分:2)

在命令行的路径中给出~时,shell会将~转换为用户的主目录。 Ruby不会这样做。

您可以使用以下内容替换~

'~/.config'.sub('~', ENV['HOME'])
=> "/Users/ttm/.config"

或仅将文件引用为:

File.join(ENV['HOME'], '.config')
=> "/Users/ttm/.config"

或:

File.realpath('.config', ENV['HOME'])
=> "/Users/ttm/.config"