Obtendo $ USUÁRIO dentro script shell quando executado com sudo?
-
06-07-2019 - |
Pergunta
Como faço para obter o $ usuário correto se eu executar um script shell com o sudo?
Eu executá-los como scripts postinstall em um pacote Mac instalar, onde estão sendo automaticamente ed-sudo, mas eu preciso fazer coisas com o nome de usuário.
$ HOME está correto, no entanto. O método deselegante seria para extrair o nome do caminho para casa, mas gostaria de saber se existe uma maneira natural de fazer isso.
Eu não posso influenciar a forma como os scripts estão sendo chamados, como é uma chamada automática dentro do instalador.
Solução
No meu sistema do $SUDO_USER
variável é definida para o nome de usuário do chamador.
Você não deve extrair o nome de usuário a partir da variável ${HOME}
diretamente. Ele está sendo configurado e não calculada. Para extrair o nome de usuário que você poderia dar uma olhada no arquivo /etc/passwd
, mas isso depende muito do sistema, por exemplo, às vezes você tem que olhar para um diretório LDAP ou as entradas são propagadas através NIS ...
Outras dicas
Você pode usar $(logname)
, que retorna o nome de login mesmo se você estiver atualmente sudoing.
Verifique a variável SUDO_USER .
http://www.gratisoft.us/sudo/man/sudo. html # ambiente
Outra maneira de obter o usuário é através do que comando. Isso às vezes é útil quando você não se importa se o usuário tiver sudo'd ou não.
who -m | awk '{print $1;}'
SUDO_USER
não é portátil. É desactivado no Fedora 17.
O $USER
e $UID
variáveis ??não são previsíveis ao invocar sudo também. Algumas distros relatar o sudoer, outros relatam o usuário root.
É de nenhuma maneira perfeita, mas você poderia usar test -w ~root && echo I have write access to ~root
.