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

$HOMEcon$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$HOMEen absoluto.En Linux, el
HOMEprograma de inicio de sesión establece la variable de entorno:loginla consola, telnet y rlogin sesionessshdpara conexiones SSHgdm,kdmoxdmpara 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á
cdal 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.shy 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
$HOMEno está definido, el shell intentará completarlo, incluso cuando no esté en modo de inicio de sesión o interactivo.fuente