I am writing a script which uses a configuration file. I already managed
that it is possible for the caller to specify the location of the config
file as a command line parameter (which was pretty easy with optparse).
Now I want to set the default location of for the config file to
/home/username/.my_config_file. Therefore I have to get the username of
the user who is calling the script.
My idea would be to parse /etc/passwd for the return value of
Process.uid but as I am pretty unexperienced in ruby I wanted to ask
here if someone could tell me a more elegant method to do it?
Now I want to set the default location of for the config file to
/home/username/.my_config_file. Therefore I have to get the username
of the user who is calling the script.
Not necessarily. How about that?:
File.expand_path(“~/.my_config_file”)
=> /home/username/.my_config_file
On Tue, 30 Jan 2007 18:57:08 +0900, Moritz R. wrote:
Process.uid but as I am pretty unexperienced in ruby I wanted to ask
here if someone could tell me a more elegant method to do it?
Thanks,
mo
Just to add to what everyone else has said so far about using
File.expand_path(’~/.my_config_file’) or ENV[‘HOME’], there is no
requirement on UNIX that the home directories be located in
/home/username. They could be placed in other trees (for example on an
NFS
share somewhere) or they may be buried several levels deep – a common
practice in large computer labs is to split them into directories based
on
their first couple letters (for easier directory access) for example
/home/k/ka/kabloom.
Thus, trying to access /home/#{username}/.my_config_file is precisely
the
wrong thing to do. Instead, use File.expand_path(’~/.my_config_file’) or
#{ENV[‘HOME’]}/.my_config_file
Thus, trying to access /home/#{username}/.my_config_file is
precisely the
wrong thing to do. Instead, use File.expand_path
(’~/.my_config_file’) or
#{ENV[‘HOME’]}/.my_config_file
These methods all depend on environment variables. If you need/want to
find this information based on the actual userid and home directory
information maintained by the OS:
require ‘etc’
homedir = Etc.getpwuid(Process.uid).dir
Gary W.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.