Jak zmienić identyfikator użytkownika / chage w skrypcie bash, aby wykonywać polecenia w tym samym skrypcie?

14

Czy istnieje sposób na zmianę tożsamości użytkownika w skrypcie (wykonywanym jako root w ramach procesu instalacji) w celu wykonania niektórych poleceń bez wywoływania zewnętrznego skryptu, a następnie powrotu rootdo uruchomienia innych poleceń?

Raczej:

#!/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
źródło
Powinieneś rzucić okiem na tę odpowiedź stackoverflow.com/a/17758312/1243547
Klaus

Odpowiedzi:

28

Nie. Ale możesz użyć sudodo uruchomienia powłoki i użyć heredoc, aby podać polecenia.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami
Ignacio Vazquez-Abrams
źródło
To z pewnością spełnia zadanie polegające na utrzymywaniu wszystkiego razem w tym samym skrypcie i może również używać podstawiania poleceń, jeśli wszystko jest opakowane w nawias zamykający jedną linię po EOF
a1an
Ta odpowiedź jest lepsza niż wszystkie odpowiedzi w pytaniu, które dubluje .
Dan Dascalescu,
1
Prawie się zastanawiam, gdybym to zrobił, nie użyłbym EOF, a zamiast tego zmieniłbym nazwę heredoc na SUDO. W ten sposób pamiętam, że działam jako super użytkownik wewnątrz zawierającego kod.
Joe Heyming
Z jakiegoś powodu wydaje się, że ustawiając zmienne w poleceniu heredoc, zmienne nie są ustawione. Jeśli spróbuję, BLA="something"a następnie np .: echo "In: $BLA"wydaje się, że BLA jest pusty
Efren