Ich möchte ein Bash-Skript erstellen, das mit sudo ausgeführt werden muss, aber den Namen des Nicht-sudo-Benutzers berücksichtigen soll, der es ausgeführt hat. Also, wenn der Benutzer bob
läuft, sudo ./myscript.sh
würde ich gerne myscript.sh
wissen, bob
wer es ausgeführt hat.
Schauen wir mal rein myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Wie kann ich den Namen des Benutzers erfahren, der den Prozess ausgelöst hat? Genauer gesagt, was soll ich verwenden, anstatt whoami
zu bekommen bob
und nicht root
?
bash
shell-script
sudo
users
marcio
quelle
quelle
USER=$(whoami)
. Beachten Sie, dass dieUSER
bereits als Shell-interne Variable existiert. Wenn es sich um ein Bash-Skript handelt, sollten Sie es nicht mit ausführen, da essh
nur eine POSIX-kompatible Teilmenge von Funktionen enthält.#!/usr/bin/env bash
meinen Bash-Skripten einen solchen Hashbang hinzugefügt .sh
oder etwas anderem aufrufen .Antworten:
Ich bin mir nicht sicher, wie Standard es ist, aber zumindest in Ubuntu-Systemen
sudo
werden die folgenden Umgebungsvariablen gesetzt (unter anderem - sieheENVIRONMENT
Abschnitt der sudo-Manpage):beispielsweise,
quelle
Wenn Sie möchten, dass es auch ohne funktioniert
sudo
, verwenden Sie${SUDO_USER:-$USER}
. Beispielsweise:Erläuterung
${var:-val}
wird auf erweitert$var
, es sei denn, es ist nicht gesetzt oder leer. In diesem Fall wird auf erweitertval
.quelle