Czy mogę uzyskać dostęp do źródłowej zmiennej $ USER z poziomu skryptu uruchamianego za pomocą `sudo`?

19

Dziwne pytanie, wiem. Oto skrypt:

echo $USER

Oto polecenie, którego używam do uruchomienia:

sudo ./myscript.sh

W tej chwili wypisuje „root”, ale chcę, żeby wydrukował jonmoją nazwę użytkownika. Czy można to zrobić, zmieniając skrypt, a nie polecenie?

Jonathan
źródło
Tak, są na to sposoby. Ale może najłatwiejszym sposobem jest obejście. Wywołaj ten skrypt z innego skryptu, w którym „zapisz” swój identyfikator użytkownika, aby „skrypt sudo” mógł uzyskać do niego dostęp.
sudodus

Odpowiedzi:

28

SUDO_USERZamiast tego użyj zmiennej środowiskowej USER.

sudoumieszcza nazwę użytkownika, który uruchomił ją w SUDO_USERzmiennej środowiskowej:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

Tak więc można po prostu wymienić $USERsię $SUDO_USERw skrypcie:

echo $SUDO_USER

Dalsza lektura

Eliah Kagan
źródło