Tengo una USER
variable en mi script y quiero ver su HOME
ruta en función de la USER
variable. ¿Cómo puedo hacer eso?
bash
shell-script
users
MatthewRock
fuente
fuente
~foo
con variablesbash
. No directamente, de todos modos.~
embargo, parece expandirse por tabulación, y otro comportamiento especificado del prefijo tilde se reemplazará por un nombre de ruta del directorio de trabajo inicial asociado con el nombre de inicio de sesión obtenido utilizando lagetpwnam()
función y, por lo tanto, probablemente esa búsqueda sea bastante buena. Sin embargo, no me gustan las expansiones de pestañas, me gusta escribir pestañas.Puede usar
eval
para obtener el directorio personal de alguien.Al menos para los usuarios locales, esto funciona con seguridad. No sé si se manejan usuarios remotos como LDAP
eval
.fuente
eval
Se necesita @nwk an . Bash no se procesa~foo
después de la expansión variable.USER
.$USER
se expande a solo una única cadena de caracteres alfabéticos.El lugar habitual es
/home/$USER
, pero eso no tiene que ser universal. El lugar definitivo para buscar dicha información es dentro del archivo/etc/passwd
.Ese archivo es legible en todo el mundo (cualquiera podría leerlo), por lo que cualquier usuario tiene acceso a su contenido.
Si el $ USER existe en el archivo, la entrada anterior al último es el directorio HOME del usuario.
Esto seleccionará la entrada e imprimirá el directorio HOME:
Para sistemas más complejos (remotos), getent es el comando habitual para obtener información de los usuarios del sistema NSS (bibliotecas de cambio de servicio de nombres).
Un comando de
Proporcionará información equivalente (si está disponible).
fuente
Si el usuario no existe,
getent
devolverá un error.Aquí hay una pequeña función de shell que no ignora el código de salida de
getent
:Aquí hay un ejemplo de uso:
fuente
Si ha iniciado sesión como root, si conoce
USER
la contraseña o siUSER
no tiene contraseña, la siguiente es otra opción:Bajo el
su
comportamiento estándar , siUSER
no está definido o está vacío,su
intentará ejecutar el comando como root.Si el valor de
USER
no es un nombre de usuario válido, entonces se produce un error apropiado:su: user <user> does not exist
.Ya hay muchas buenas respuestas aquí, pero esto puede ayudar a alguien.
fuente