Wie kann ich die Benutzer-ID in einem Bash-Skript wechseln / ändern, um Befehle im selben Skript auszuführen?

12

Gibt es eine Möglichkeit, die Benutzeridentität innerhalb eines Skripts (das als Root im Rahmen eines Installationsprozesses ausgeführt wird) zu ändern, um einige Befehle auszuführen, ohne ein externes Skript aufzurufen, und dann zu zurückzukehren root, um andere Befehle auszuführen?

Art von:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...
a1an
quelle

Antworten:

27

Nein. Sie können sudojedoch eine Shell ausführen und mit einem Heredoc Befehle eingeben.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami
Ignacio Vazquez-Abrams
quelle
Dies erledigt sicherlich die Aufgabe, die Dinge im selben Skript zusammenzuhalten, und kann auch die Befehlsersetzung verwenden, wenn alles eine Zeile nach EOF
a1an
Diese Antwort ist besser als alle Antworten in der Frage, die diese dupliziert .
Dan Dascalescu
1
Ich frage mich fast, wenn ich das tun würde, würde ich EOF nicht verwenden und stattdessen den Namen des Heredocs in SUDO ändern. Auf diese Weise würde ich mich daran erinnern, dass ich als Superuser im enthaltenen Code ausgeführt werde.
Joe Heyming
Aus irgendeinem Grund scheint es, dass beim Festlegen von vars im Befehl heredoc die vars nicht festgelegt werden. Wenn ich es versuche BLA="something"und dann zB: echo "In: $BLA"scheint BLA leer zu sein
Efren