Je cherche l'endroit où la variable d'environnement $ HOME est définie. C'est après la connexion, à mon avis.
J'utilise Linux debian 2.6.32-5-686.
linux
environment-variables
webnoon
la source
la source
$HOME
avec$PATH
. Il n'est pas logique d'avoir plusieurs chemins d'accès$HOME
(la valeur entière sera traitée comme un seul chemin d'accès) ou, dans la plupart des cas, de modifier$HOME
du tout.Sous Linux, la
HOME
variable d'environnement est définie par le programme de connexion:login
sur console, telnet et rloginsshd
pour les connexions SSHgdm
,kdm
ouxdm
pour les sessions graphiques.la source
Le programme de connexion l'arrange avant d'appeler exec sur votre shell (en l'incluant dans les arguments de exec), en fonction de la valeur dans / etc / passwd.
la source
Modifier en exécutant:
usermod -d /home/whatever_dir whatever_user
.Veuillez noter que ce sera (évidemment) le nouveau répertoire personnel. Bash le fera
cd
à la connexion, alors assurez-vous qu'il existe et que les autorisations sont correctes. En outre, ne pas oublier.bashrc
,.profile
,.xinitrc
, etc; s'ils ne sont pas dans le répertoire personnel, ils ne seront pas lus.De
usermod
:la source
J'ai creusé, et la réponse à cela est un peu surprenante. Prenez le script de test suivant et
chmod +x
le:Nous pouvons l'exécuter avec
./test.sh
et voir:Jetons un coup d'œil sous le capot avec strace.
$ strace ./test.sh |& grep '^open[a-z]*'
Je ne vois aucune mention de HOME, de fichiers rc ou de passwd. Essayons-le avec un environnement propre:
Rien, comme prévu. Exécutons le script dans l'environnement vide.
Intéressant, le script peut rentrer à la maison. Voyons maintenant.
Maintenant, nous voyons:
J'ai mis en gras les lignes intéressantes. Comme nous pouvons le voir, il semblerait que lorsqu'il
$HOME
n'est pas défini, le shell essaiera de le remplir, même lorsqu'il n'est pas en mode connexion ou interactif.la source