Feature #12695
closedFile.expand_path should resolve ~/ using /etc/passwd when HOME is not set
Description
I would expect a call like File.expand_path('~/.ssh/known_hosts') to work even though HOME is not set.
A reason this is important to fix is that libraries (in my use case Net::SSH) do calls like File.expand_path('~/.ssh/known_hosts'), but this will often fail when the code is run in a unix service, since HOME often isn't set then.
I considered reporting this as a bug, but the current behaviour is actually documented.
Updated by shyouhei (Shyouhei Urabe) almost 10 years ago
+1 it makes sense to me.
Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
Why doesn't your service launcher set HOME?
Updated by akr (Akira Tanaka) almost 10 years ago
I think its good idea.
Although POSIX doesn't specify it for shell, we can define it in Ruby.
Updated by knu (Akinori MUSHA) almost 10 years ago
Makes sense. Ruby knows how to resolve ~user, so you may well expect it to resolve ~ as well given that the login name is identified.
Updated by knu (Akinori MUSHA) almost 10 years ago
Bash seems to do that:
% bash -c 'unset HOME; echo ~'
/home/knu
As far as I tested most other known shells like tcsh, zsh, ash, dash and pdksh do not, but we could follow the best.
Through my testing, I found fish unique in that it automatically defines a missing HOME on startup and then expands ~ simply to $HOME. While it would keep things simple and efficient, Ruby is not a shell after all, and altering the environment would clearly be something unasked for.
I think following Bash should be the way to go.
Updated by matz (Yukihiro Matsumoto) over 9 years ago
Accepted.
Matz.
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Status changed from Open to Closed
Applied in changeset r56902.
file.c: home directory from system
- file.c (rb_default_home_dir): resolve home directory from the
system database when HOME is not set. [Feature #12695]
Updated by pabs (Paul Wise) over 9 years ago
Does anyone know if this also fixes the Dir.home value? Currently (in 2.3) that doesn't work when HOME is unset either.
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
This is a new feature of 2.4.
Updated by shyouhei (Shyouhei Urabe) about 6 years ago
- Related to Bug #16787: [patch] allow Dir.home to work for non-login procs when $HOME not set added