Assuming the machine is running a Linux kernel, sessions make use of the Bash shell and everything is using default configurations (no user has made any changes to config files), can we assume that the $HOME environment variable is always set?

  • nobody doesn't have a home! (It's nobody, the user.) – devnull Apr 9 '14 at 6:18
  • 1
    @devnull not having a home (ie. having a home directory specified that doesn't exist), doesn't mean the $HOME env. variable cannot be set. If it is set, it just doesn't have to point to an existing directory nor to the home entry in /etc/passwd – Anthon Apr 9 '14 at 6:49

Yes. The POSIX specification requires the OS to set a value for $HOME:

The system shall initialize this variable at the time of login to be a pathname of the user's home directory. See pwd.h.

What about user nobody?

# su - nobody
No directory, logging in with HOME=/
$ echo $HOME

Even though nobody has no true home, HOME is set to the root directory.

  • It isn't the shell that sets HOME — none of the common shells does except zsh. It's the program that logs you in (including methods like cron). – Gilles Apr 10 '14 at 0:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.