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?
Asked
Active
Viewed 4.8k times
35
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 Answers
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
-
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 'SO- stop being evil' Apr 10 '14 at 00:50