2009-10-27 21 views
28

¿Cómo obtengo el $ USER correcto si ejecuto un script de shell con sudo?

Los ejecuto como scripts postinstalación en un paquete de instalación Mac, donde se están editando automáticamente, pero necesito hacer cosas con el nombre de usuario.

$ HOME es correcta, sin embargo. El método poco elegante sería extraer el nombre de la ruta principal, pero me pregunto si existe una forma natural de hacerlo.

No puedo influir en la forma en que se llaman los scripts, ya que es una llamada automática dentro del instalador.

Respuesta

30

En mi sistema, la variable $SUDO_USER se configura con el nombre de usuario de la persona que llama.

No debe extraer directamente el nombre de usuario de la variable ${HOME}. Está siendo configurado y no calculado. Para extraer el nombre de usuario puede echar un vistazo al archivo /etc/passwd, pero esto depende mucho del sistema, p. Ej. a veces debe buscar en un directorio LDAP o las entradas se propagan a través de NIS ...

+1

Para los que aterricen aquí porque gnome-terminal dejó de admitir 'logname', esto parece funcionar bien' $ (nombre de registro 2>/dev/null || echo $ SUDO_USER) '. Probado en MacOS también. Informe de error: https://bugzilla.gnome.org/show_bug.cgi?id=747046 – tresf

9

SUDO_USER no es portátil. No está configurado en Fedora 17.

Las variables $USER y $UID tampoco son predecibles al invocar sudo. Algunas distribuciones informan el sudoer, otras informan el usuario raíz.

No es perfecto, pero podría usar test -w ~root && echo I have write access to ~root.

15

Puede usar $(logname), que devuelve su nombre de usuario, incluso si actualmente está haciendo algo.

+5

Para futuros usuarios de Google; esta debería ser la respuesta aceptada, funciona en OSX, Debian y Centos. – Knetic

+2

@Knetic para el futuro usted y otros Googlers, no puede: https://bugzilla.gnome.org/show_bug.cgi?id=747046 – muru

+0

Devuelve el nombre de sudo en Ubuntu 16.04.1 LTS – Adnan

Cuestiones relacionadas