Nunca debe analizar /etc/passwd
directamente. Es posible que esté en un sistema con usuarios remotos, en cuyo caso no estarán /etc/passwd
. El /etc/passwd
archivo podría estar en otro lugar. Etc.
Si necesita acceso directo a la base de datos de usuarios, use getent
.
$ getent passwd phemmer
phemmer:*:1000:4:phemmer:/home/phemmer:/bin/zsh
$ getent passwd phemmer | awk -F: '{ print $6 }'
/home/phemmer
Sin embargo, también hay otra forma que no implica el análisis:
$ user=phemmer
$ eval echo "~$user"
/home/phemmer
El ~
operador en el shell se expande al directorio de inicio del usuario especificado. Sin embargo, tenemos que usar el eval
porque la expansión de la variable $user
ocurre después de la expansión de ~
. Entonces, al usar las eval
comillas dobles y, se está expandiendo efectivamente $user
primero, luego llamando eval echo "~phemmer"
.
Una vez que tenga el directorio de inicio, simple tachuela /.ssh
hasta el final.
$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh