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?
* If you just need the user's home directory, use
File.expand_path('~/.my_config_file').
* If you actually need the user's login name, the USER envvar is
usually (always?) set to this -- so ENV['USER'].
* If you really need to traipse through passwd ruby also comes with an
'etc' file parsing library.
require 'etc'
Then:
user = Etc.getpwuid(Process.uid).name
Or:
effective_user = Etc.getpwuid(Process.euid).name
More info:
RDoc Documentation
(Although I've just noticed that clicking on 'etc' gives a 500...)
···
On 1/30/07, Moritz Reiter <mo@agrav.org> wrote:
Hi,
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?
Moritz Reiter <mo@agrav.org> wrote/schrieb <d1d81a8b82b36ce7f4843e7949c729c0@ruby-forum.com>:
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
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
--Ken
···
On Tue, 30 Jan 2007 18:57:08 +0900, Moritz Reiter wrote:
Hi,
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?
Thanks,
mo
--
Ken Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/
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 Wright
···
On Jan 30, 2007, at 10:10 AM, Ken Bloom wrote:
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