Estoy buscando el lugar donde se establece la variable de entorno $ HOME. Es después de iniciar sesión, en mi opinión.
Estoy usando Linux debian 2.6.32-5-686.
linux
environment-variables
tarde
fuente
fuente
$HOME
con$PATH
. No tiene sentido tener múltiples rutas$HOME
(el valor completo se tratará como un solo nombre de ruta) o, en la mayoría de los casos, modificar$HOME
en absoluto.En Linux, el
HOME
programa de inicio de sesión establece la variable de entorno:login
la consola, telnet y rlogin sesionessshd
para conexiones SSHgdm
,kdm
oxdm
para sesiones gráficas.fuente
El programa de inicio de sesión lo organiza antes de llamar a exec en su shell (incluyéndolo en los argumentos de exec), en función del valor en / etc / passwd.
fuente
Editar la siguiente orden:
usermod -d /home/whatever_dir whatever_user
.Tenga en cuenta que este (obviamente) será el nuevo directorio de inicio. Bash lo hará
cd
al iniciar sesión, así que asegúrese de que exista y que los permisos sean correctos. Además, no se olvide de.bashrc
,.profile
,.xinitrc
, etc; si no están en el directorio de inicio, no serán leídos.De
usermod
:fuente
Investigué un poco, y la respuesta a esto es un poco sorprendente. Tome el siguiente script de prueba y
chmod +x
:Podemos ejecutarlo
./test.sh
y ver:Echemos un vistazo debajo del capó con strace.
$ strace ./test.sh |& grep '^open[a-z]*'
No veo ninguna mención de HOME, archivos rc o passwd. Probémoslo con un ambiente limpio:
Nada, como se esperaba. Ejecutemos el script en el entorno en blanco.
Interesante, el guión puede llegar a casa. Ahora vamos a rastrear.
Ahora vemos:
He marcado las líneas interesantes. Como podemos ver, parece que cuando
$HOME
no está definido, el shell intentará completarlo, incluso cuando no esté en modo de inicio de sesión o interactivo.fuente