Você nunca deve analisar /etc/passwd
diretamente. Você pode estar em um sistema com usuários remotos e, nesse caso, eles não estarão em /etc/passwd
. O arquivo /etc/passwd
pode estar em outro lugar. Etc.
Se você precisar de acesso direto ao banco de dados do usuário, use getent
.
$ getent passwd phemmer
phemmer:*:1000:4:phemmer:/home/phemmer:/bin/zsh
$ getent passwd phemmer | awk -F: '{ print $6 }'
/home/phemmer
No entanto, há também outra maneira que não envolve a análise:
$ user=phemmer
$ eval echo "~$user"
/home/phemmer
O operador ~
no shell é expandido para o diretório inicial do usuário especificado. No entanto, temos que usar o eval
porque a expansão da variável $user
acontece após a expansão de ~
. Então, usando o eval
e aspas duplas, você está efetivamente expandindo $user
primeiro, depois chamando eval echo "~phemmer"
.
Uma vez que você tenha o diretório home, o argumento simples /.ssh
até o final.
$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh