2009-10-27 12 views
28

Come ottengo il corretto $ USER se eseguo uno script di shell con sudo?

Li eseguo come script postinstall in un pacchetto di installazione Mac, dove vengono automaticamente aggiunti automaticamente, ma ho bisogno di fare cose con il nome utente.

$ HOME è corretto, però. Il metodo inelegante sarebbe quello di estrarre il nome dal percorso di casa, ma mi chiedo se c'è un modo naturale per farlo.

Non riesco a influenzare il modo in cui vengono chiamati gli script, poiché è una chiamata automatica all'interno dell'installer.

risposta

30

Sul mio sistema la variabile $SUDO_USER è impostata sul nome utente del chiamante.

Non è necessario estrarre direttamente il nome utente dalla variabile ${HOME}. Viene configurato e non calcolato. Per estrarre il nome utente è possibile dare un'occhiata al file /etc/passwd, ma questo dipende molto dal sistema, ad es. a volte devi cercare in una directory LDAP o le voci vengono propagate tramite NIS ...

+1

Per quelli che atterrano qui perché gnome-terminal ha abbandonato il supporto per 'logname', questo sembra funzionare bene' $ (logname 2>/dev/null || echo $ SUDO_USER) '. Testato anche su MacOS. Segnalazione di bug: https://bugzilla.gnome.org/show_bug.cgi?id=747046 – tresf

9

SUDO_USER non è portatile. Non è impostato su Fedora 17.

Le variabili $USER e $UID non sono prevedibili quando si richiama sudo. Alcune distribuzioni riportano il sudoer, altre riportano l'utente root.

Non è affatto perfetto, ma è possibile utilizzare test -w ~root && echo I have write access to ~root.

15

È possibile utilizzare $(logname), che restituisce il nome di accesso anche se si sta eseguendo attualmente.

+5

Per i googler futuri; questa dovrebbe essere la risposta accettata, funziona su OSX, Debian e Centos. – Knetic

+2

@Knetic per il futuro tu e altri googler, non può: https://bugzilla.gnome.org/show_bug.cgi?id=747046 – muru

+0

Sta restituendo il nome sudo su Ubuntu 16.04.1 LTS – Adnan

Problemi correlati