Ottenere $ USER all'interno dello script della shell quando si esegue con sudo?
-
06-07-2019 - |
Domanda
Come posso ottenere $ USER corretto se eseguo uno script di shell con sudo?
Li eseguo come script post-installazione in un pacchetto di installazione per Mac, dove vengono automaticamente modificati, ma devo fare cose con il nome utente.
$ HOME è corretto, comunque. Il metodo non elegante sarebbe quello di estrarre il nome dal percorso principale, ma mi chiedo se esiste un modo naturale per farlo.
Non posso influenzare il modo in cui vengono chiamati gli script, in quanto si tratta di una chiamata automatica all'interno del programma di installazione.
Soluzione
Sul mio sistema la variabile $ SUDO_USER
è impostata sul nome utente del chiamante.
Non devi estrarre direttamente il nome utente dalla variabile $ {HOME}
. Viene configurato e non calcolato. Per estrarre il nome utente puoi dare un'occhiata al file / etc / passwd
, ma questo dipende molto dal sistema, ad es. a volte devi guardare in una directory LDAP o le voci vengono propagate tramite NIS ...
Altri suggerimenti
Puoi usare $ (logname)
, che restituisce il tuo nome di accesso anche se stai attualmente eseguendo una procedura di annullamento.
Ispeziona la variabile SUDO_USER .
http://www.gratisoft.us/sudo/man/sudo. html # ambiente
Un altro modo per ottenere l'utente è tramite il comando who . Questo è utile a volte quando non ti interessa se l'utente ha eseguito il sudo'd o meno.
who -m | awk '{print $1;}'
SUDO_USER
non è portatile. Non è impostato su Fedora 17.
Le variabili $ USER
e $ UID
non sono prevedibili nemmeno quando si invoca sudo. Alcune distro riportano il sudoer, altri segnalano l'utente root.
Non è assolutamente perfetto, ma potresti usare test -w ~ root & amp; & amp; echo Ho accesso in scrittura a ~ root
.