How to specify a file path using '~' in Ruby?

前端 未结 2 1949
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-20 13:19

If I do:

require \'inifile\'

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

puts data[\'region\']
         


        
相关标签:
2条回答
  • 2021-01-20 13:56

    Ruby has a method for this case. It is File::expand_path.

    Converts a pathname to an absolute pathname. Relative paths are referenced from the current working directory of the process unless dir_string is given, in which case it will be used as the starting point. The given pathname may start with a “~”, which expands to the process owner’s home directory (the environment variable HOME must be set correctly). “~user” expands to the named user’s home directory.

    require 'inifile'
    
    # read an existing file
    file = IniFile.load(File.expand_path('~/.config'))
    
    0 讨论(0)
  • 2021-01-20 14:14

    When given ~ in a path at the command line, the shell converts ~ to the user's home directory. Ruby doesn't do that.

    You could replace ~ using something like:

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

    or just reference the file as:

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

    or:

    File.realpath('.config', ENV['HOME'])
    => "/Users/ttm/.config"
    
    0 讨论(0)
提交回复
热议问题