35

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?

Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
yanhan
  • 453
  • 1
  • 4
  • 5
  • `nobody` doesn't have a home! (It's `nobody`, the user.) – devnull Apr 09 '14 at 06:18
  • 2
    @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 09 '14 at 06:49

1 Answers1

34

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

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.

John1024
  • 73,527
  • 11
  • 167
  • 163