Ich suche nach dem Ort, an dem $ HOME Umgebungsvariable gesetzt. Es ist nach dem Login, meiner Meinung nach.
Ich benutze Linux Debian 2.6.32-5-686.
linux
environment-variables
webnoon
quelle
quelle
$HOME
mit$PATH
. Es ist nicht sinnvoll, mehrere Pfade$HOME
einzugeben (der gesamte Wert wird als einzelner Pfadname behandelt) oder in den meisten Fällen überhaupt zu ändern$HOME
.Unter Linux wird die
HOME
Umgebungsvariable vom Anmeldeprogramm festgelegt:login
auf Konsole, Telnet und Rlogin- Sitzungensshd
für SSH-Verbindungengdm
,kdm
oderxdm
für grafische Sitzungen.quelle
Das Anmeldeprogramm ordnet es vor dem Aufruf von exec auf Ihrer Shell an (indem es es in die Argumente für exec einfügt), basierend auf dem Wert in / etc / passwd.
quelle
Bearbeiten , indem Sie:
usermod -d /home/whatever_dir whatever_user
.Bitte beachten Sie, dass dies (offensichtlich) das neue Ausgangsverzeichnis sein wird. Bash wird
cd
es bei der Anmeldung tun, also stellen Sie sicher, dass es existiert und die Berechtigungen korrekt sind. Darüber hinaus vergessen Sie nicht über.bashrc
,.profile
,.xinitrc
, etc; Wenn sie sich nicht im Basisverzeichnis befinden, werden sie nicht gelesen.Von
usermod
:quelle
Ich habe ein bisschen gegraben, und die Antwort darauf ist ein bisschen überraschend. Nehmen Sie das folgende Testskript und
chmod +x
es:Wir können damit arbeiten
./test.sh
und sehen:Lassen Sie uns mit Spannung einen Blick unter die Haube werfen.
$ strace ./test.sh |& grep '^open[a-z]*'
Ich sehe keine Erwähnung von HOME, RC-Dateien oder passwd. Versuchen wir es mit einer sauberen Umgebung:
Nichts wie erwartet. Lassen Sie uns das Skript in der leeren Umgebung ausführen.
Interessanterweise kommt das Drehbuch nach Hause. Lassen Sie uns jetzt verfolgen.
Jetzt sehen wir:
Ich habe die interessanten Zeilen fett geschrieben. Wie wir sehen können, scheint es, als würde
$HOME
die Shell , wenn nicht definiert, versuchen, es auszufüllen, auch wenn sie sich nicht im Anmelde- oder interaktiven Modus befindet.quelle