Tengo una USERvariable en mi script y quiero ver su HOMEruta en función de la USERvariable. ¿Cómo puedo hacer eso?
bash
shell-script
users
MatthewRock
fuente
fuente

~foocon 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
evalpara 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
evalSe necesita @nwk an . Bash no se procesa~foodespués de la expansión variable.USER.$USERse 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,
getentdevolverá 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
USERla contraseña o siUSERno tiene contraseña, la siguiente es otra opción:Bajo el
sucomportamiento estándar , siUSERno está definido o está vacío,suintentará ejecutar el comando como root.Si el valor de
USERno 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