Quiero crear una secuencia de comandos bash que debe ejecutarse con sudo pero debe tener en cuenta el nombre del usuario que no lo hizo. Entonces, si el usuario bobejecuta, sudo ./myscript.shme gustaría myscript.shsaber quién bobfue el que lo ejecutó.
Miremos adentro myscript.sh:
USER=$(whoami)
# Do something that takes into account the username.
¿Cómo puedo saber el nombre del usuario que generó el proceso? Más específicamente, ¿qué debo usar en lugar de whoamipara obtener boby no root?
                    
                        bash
                                shell-script
                                sudo
                                users
                                
                    
                    
                        marcio
fuente
                
                fuente

USER=$(whoami). Tenga en cuenta queUSERya existe como una variable interna de shell. Además, si se trata de un script bash, no lo ejecute utilizandosh, que solo tiene un subconjunto de características compatibles con POSIX.#!/usr/bin/env bashen mis scripts de bash.shu otra cosa.Respuestas:
No estoy seguro de qué tan estándar es, pero al menos en los sistemas Ubuntu
sudoestablece las siguientes variables de entorno (entre otras, consulte laENVIRONMENTsección de la página de manual de sudo):por ejemplo,
fuente
Si también quieres que funcione sin él
sudo, úsalo${SUDO_USER:-$USER}. Por ejemplo:Explicación
${var:-val}se expandirá a$var, a menos que esté desarmado o vacío, en cuyo caso se expandirá aval.fuente