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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top