Ich arbeite derzeit an einem Bash-Skript, das verschiedene Programme auf einem Standard-Linux-System (derzeit Ubuntu) installiert und einrichtet. Da es Programme installiert und eine Reihe von Dateien in verschiedene Ordner kopiert, für die erhöhte Berechtigungen erforderlich sind, habe ich bereits den Standard "Ich benötige erhöhte Berechtigungen" -und-Exit ausgeführt.
Ich möchte jedoch, wenn möglich, den Benutzer zur Eingabe seines Sudo-Kennworts auffordern und die Skriptberechtigungen automatisch erhöhen können, wenn der Benutzer den Skriptbefehl nicht mit sudo ausführt (z. B. über den GUI-Dateimanager). ohne dass der Benutzer das Skript neu starten muss.
Da dies so konzipiert ist, dass es auf Standard-Linux-Installationen ausgeführt werden kann, funktioniert jede Option, die das System ändert, für meine Zwecke nicht. Alle Optionen müssen im Skript selbst enthalten sein.
Ist das innerhalb von Bash möglich? Wenn ja, wie geht das am besten (sicher und dennoch präzise)?
Antworten:
Ich starte
sudo
direkt aus dem Skript:quelle
Ich schlage vor:
quelle
if [[ -t 1 ]];
prüft?Fügen Sie dies als erste Zeile des Skripts hinzu:
Wechseln Sie
sudo
zugksu
oder,gksudo
wenn Sie eine grafische Eingabeaufforderung bevorzugen.quelle
"$*"
alle Argumente zu einem zusammengeführt werden (/path/to/script one two three
was dazu führen$1
wirdone two three
) und$*
dass Leerzeichen in Argumenten ohne Anführungszeichen durcheinander gebracht werden."$@"
funktioniert richtigsudo
, es ist viel besser als mitsu
. Aber wenn Sie wirklich wollen, wahrscheinlichexec su -c "$0" "$@"
Beispielskript Ich habe nichts dagegen zu teilen ::
--ImP.TeK
quelle
[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
- Sieht aus wie ein wirklich effizienter Einzeiler! Nett!$EUDI
oder immer das gleiche Ergebnis? ZB[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"