Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Jan 2007 15:19:13 -0800
From:      Bill Campbell <freebsd@celestial.com>
To:        freebsd-questions@freebsd.org, Bill Campbell <freebsd@celestial.com>
Subject:   Re: [OT] Does "~" always point to $HOME?
Message-ID:  <20070126231913.GA12604@ayn.mi.celestial.com>
In-Reply-To: <20070126230241.GA93074@ns.umpquanet.com>
References:  <20070126175122.64D2616A500@hub.freebsd.org> <20070126230241.GA93074@ns.umpquanet.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Jan 26, 2007, James Long wrote:
>> Message: 24
>> Date: Fri, 26 Jan 2007 09:22:44 -0800
>> From: Bill Campbell <freebsd@celestial.com>
>> Subject: Re: [OT] Does "~" always point to $HOME?
>> To: freebsd-questions@freebsd.org, Bill Campbell
>> 	<freebsd@celestial.com>
>> Message-ID: <20070126172244.GB6575@ayn.mi.celestial.com>
>> Content-Type: text/plain; charset=us-ascii
>> 
>> My point isn't whether the FreeBSD /bin/sh expands it, but that not all
>> systems are FreeBSD, and that one can have problems on other *NIX systems.
>> 
>> Knowing where there may be differences, and avoiding the assumptions that a
>> program behaves the same on all systems, can help writing code that's
>> portable without surprises.
>
>This begs the rookie question:
>
>What is the portable way to determine an aribtrary user's home directory
>then, if ~username is not portable across shells?
>
>Does one just have to grep and awk /etc/passwd?  Is the format of
>/etc/passwd portable, such that one standard grep/awk sequence will 
>portably return the home directory for user "username"?

Probably the most portable way to do this would be to use awk.  A
simple script, homedir, might look like this:

#!/bin/sh
# getting the backwhacks correct is sometimes ``interesting''
homedir=`awk -F: "/^$1:/{print \\$6}" /etc/passwd`

[ -z "$homedir" ] && {
	echo 'empty home for ' $1 2>&1
	exit 1
}
echo $homedir
exit 0

Bill
--
INTERNET:   bill@Celestial.COM  Bill Campbell; Celestial Software, LLC
URL: http://www.celestial.com/  PO Box 820; 6641 E. Mercer Way
FAX:            (206) 232-9186  Mercer Island, WA 98040-0820; (206) 236-1676

``Fix reason firmly in her seat and call to her tribunal every fact,
every opinion. Question with boldness even the existence of a God;
because, if there is one, he must more approve of the homage of 
reason, than that of blindfolded fear.''  --Thomas Jefferson



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070126231913.GA12604>