On Jan 31, 2023, at 8:32 AM, Ralph Corderoy <ra...@inputplus.co.uk> wrote: > > Hi Ken, > >>> So an unset HOME is allowed by this function, it's an empty HOME >>> which isn't. >> >> It strikes me as strange that there is a difference between an unset >> HOME and an empty HOME in terms of behavior. I mean, yes, I can see >> how the code is written, the historical precedent and how we got here, >> but ... well, I'm trying to understand the justification for treating >> those differently. > > A non-empty HOME is clear; its content should be used. > > An unset HOME is clear; it cannot be used. > There's a ready fallback, getpwuid(3) and pw_dir so use that. > > What's the intent of an empty HOME? > Is it set by accident when it's meant to be unset? > Is it empty by accident when it's meant to be non-empty? > Do they want HOME=/, HOME=$PWD, or are they expecting it to error. > Any choice could be not what the user intended so exit.
FWIW, this is how /bin/sh behaves on FreeBSD: $ cd /tmp $ sh -c 'cd; echo $PWD' /home/bakul $ unset HOME $ sh -c 'cd; echo $PWD' cd: HOME not set /tmp $ HOME=/bin sh -c 'cd; echo $PWD' /bin $ HOME='' sh -c 'cd; echo $PWD' /tmp $ HOME='foo' sh -c 'cd; echo $PWD' cd: foo: No such file or directory /tmp