Você nunca deve analisar /etc/passwd
diretamente. Você pode estar em um sistema com usuários remotos; nesse caso, eles não estarão /etc/passwd
. O /etc/passwd
arquivo 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 se expande para o diretório inicial do usuário especificado. No entanto, temos que usar o eval
porque a expansão da variável $user
ocorre após a expansão de ~
. Portanto, usando as eval
aspas e duplas, você estará expandindo efetivamente $user
primeiro e depois chamando eval echo "~phemmer"
.
Depois de ter o diretório inicial, siga /.ssh
para o final.
$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh