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...


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.