Szukam miejsca, w którym ustawiono zmienną środowiskową $ HOME. Moim zdaniem jest to po zalogowaniu.
Używam systemu Linux Debian 2.6.32-5-686.
linux
environment-variables
popołudnie
źródło
źródło
$HOME
się$PATH
. Nie ma sensu mieć wielu ścieżek w$HOME
(cała wartość będzie traktowana jako pojedyncza nazwa ścieżki) lub, w większości przypadków,$HOME
w ogóle modyfikować .W systemie Linux
HOME
zmienna środowiskowa jest ustawiana przez program logowania:login
konsoli, telnet i rloginsshd
dla połączeń SSHgdm
,kdm
lubxdm
na sesje graficznych.źródło
Program logowania porządkuje go przed wywołaniem exec w powłoce (poprzez włączenie go w argumentach exec), na podstawie wartości w / etc / passwd.
źródło
Edytuj to, uruchamiając:
usermod -d /home/whatever_dir whatever_user
.Pamiętaj, że będzie to (oczywiście) nowy katalog domowy. Bash zrobi
cd
to przy logowaniu, więc upewnij się, że istnieje i uprawnienia są prawidłowe. Ponadto, nie zapomnij o.bashrc
,.profile
,.xinitrc
, etc; jeśli nie ma ich w katalogu domowym, nie zostaną odczytane.Od
usermod
:źródło
Kopałem trochę, a odpowiedź na to pytanie jest nieco zaskakująca. Weź następujący skrypt testowy i
chmod +x
to:Możemy go uruchomić
./test.sh
i zobaczyć:Rzućmy okiem pod maską ze sznurkiem.
$ strace ./test.sh |& grep '^open[a-z]*'
Nie widzę żadnej wzmianki o HOME, plikach rc ani passwd. Spróbujmy z czystą env:
Nic, zgodnie z oczekiwaniami. Uruchommy skrypt w pustej env.
Ciekawe, że skrypt może wrócić do domu. Teraz prześledźmy.
Teraz widzimy:
Pogrubiłem ciekawe linie. Jak widzimy, wydaje się, że gdy
$HOME
nie jest zdefiniowany, powłoka spróbuje go wypełnić, nawet gdy nie jest w trybie logowania ani w trybie interaktywnym.źródło