Eu tenho uma USER
variável no meu script e quero ver o HOME
caminho dele com base na USER
variável. Como eu posso fazer isso?
bash
shell-script
users
MatthewRock
fonte
fonte
~foo
com variáveis embash
. Não diretamente, de qualquer maneira.~
parece parecer tabular, no entanto, e outro comportamento especificado do prefixo til deve ser substituído por um nome de caminho do diretório de trabalho inicial associado ao nome de login obtido usando agetpwnam()
função e, portanto, provavelmente essa pesquisa é muito boa. Eu não gosto de extensões de tabulação - gosto de digitar guias.Você pode usar
eval
para obter o diretório pessoal de alguém.Pelo menos para usuários locais, isso funciona com certeza. Não sei se usuários remotos como LDAP são tratados
eval
.fonte
eval
é necessário. O Bash não processa~foo
após a expansão variável.USER
.$USER
expande para apenas uma única seqüência de caracteres alfabéticos.O lugar usual é
/home/$USER
, mas isso não precisa ser universal. O local definitivo para procurar essas informações é dentro do arquivo/etc/passwd
.Esse arquivo é legível mundialmente (qualquer um pode lê-lo), portanto, qualquer usuário tem acesso ao seu conteúdo.
Se o $ USER existir no arquivo, a entrada anterior ao último será o diretório HOME do usuário.
Isso selecionará a entrada e imprimirá o diretório HOME:
Para sistemas mais complexos (remotos), getent é o comando usual para obter informações dos usuários do sistema NSS (Name Service Switch libraries).
Um comando de
Fornecerá informações equivalentes (se disponíveis).
fonte
Se o usuário não existir,
getent
retornará um erro.Aqui está uma pequena função de shell que não ignora o código de saída de
getent
:Aqui está um exemplo de uso:
fonte
Se você está logado como root, se você conhece
USER
a senha ou se aUSER
senha não tem, o seguinte é outra opção:Sob o
su
comportamento padrão , seUSER
for indefinido ou vazio,su
tentará executar o comando como root.Se o valor
USER
não é um nome de usuário válido, então um erro apropriada será levantada:su: user <user> does not exist
.Já existem muitas boas respostas aqui, mas isso ainda pode ajudar alguém.
fonte