Estou procurando o local onde a variável de ambiente $ HOME está definida. É após o login, na minha opinião.
Estou usando o Linux debian 2.6.32-5-686.
linux
environment-variables
webnoon
fonte
fonte
$HOME
com$PATH
. Não faz sentido ter vários caminhos$HOME
(o valor inteiro será tratado como um único nome de caminho) ou, na maioria dos casos, para modificar$HOME
.No Linux, a
HOME
variável de ambiente é configurada pelo programa de login:login
no console, telnet e rlogin sessõessshd
para conexões SSHgdm
,kdm
ouxdm
para sessões gráficas.fonte
O programa de login organiza-o antes de chamar exec em seu shell (incluindo-o nos argumentos para exec), com base no valor em / etc / passwd.
fonte
Edite isso executando:
usermod -d /home/whatever_dir whatever_user
.Observe que este (obviamente) será o novo diretório inicial. O Bash fará
cd
isso no login, portanto, verifique se ele existe e se as permissões estão corretas. Além disso, não se esqueça.bashrc
,.profile
,.xinitrc
, etc; se não estiverem no diretório inicial, não serão lidos.De
usermod
:fonte
Eu fiz algumas escavações, e a resposta para isso é um pouco surpreendente. Pegue o seguinte script de teste e
chmod +x
:Podemos executá-lo
./test.sh
e ver:Vamos dar uma olhada debaixo do capô com traços.
$ strace ./test.sh |& grep '^open[a-z]*'
Não vejo nenhuma menção a HOME, arquivos rc ou senha. Vamos tentar com um ambiente limpo:
Nada, como esperado. Vamos executar o script no ambiente em branco.
Interessante, o script é capaz de chegar em casa. Agora vamos rastrear.
Agora vemos:
Eu atrevi as linhas interessantes. Como podemos ver, parece que quando
$HOME
não está definido, o shell tentará preenchê-lo, mesmo quando não estiver no modo de login ou interativo.fonte