Kann ich in einem Skript, das mit `sudo` ausgeführt wird, auf die ursprüngliche $ USER-Variable zugreifen?

19

Eine seltsame Frage, ich weiß. Hier ist das Skript:

echo $USER

Hier ist der Befehl, den ich verwende, um es auszuführen:

sudo ./myscript.sh

Im Moment gibt es "root" aus, aber ich möchte, dass es jonmeinen Benutzernamen ausgibt. Gibt es eine Möglichkeit, das Skript und nicht den Befehl zu ändern?

Jonathan
quelle
Ja, es gibt Möglichkeiten, dies zu tun. Aber vielleicht ist der einfachste Weg ein Workaround. Rufen Sie dieses Skript von einem anderen Skript aus auf, in dem Sie Ihre Benutzer-ID "speichern", damit das "sudo-Skript" darauf zugreifen kann.
Sudodus

Antworten:

28

Verwenden Sie die SUDO_USERUmgebungsvariable anstelle von USER.

sudoFügt den Namen des Benutzers, der ihn ausgeführt hat, in die SUDO_USERUmgebungsvariable ein:

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

So können Sie in Ihrem Skript einfach ersetzen $USERdurch $SUDO_USER:

echo $SUDO_USER

Weitere Lektüre

Eliah Kagan
quelle