Uruchamiam skrypt bash z perspektywy roota, która następnie uruchamia program w skrypcie
su -c "sh /home/user2/script.sh" -m user2
Problem polega na tym, że program uruchamiany przez ten skrypt, mimo że jest uruchamiany jako użytkownik2 , nadal próbuje utworzyć pliki w katalogu /root/.config/ , co oczywiście kończy się niepowodzeniem, ponieważ nie jest dozwolone przez użytkownika2 .
Czy robię coś źle? Czy istnieje inny lepszy sposób na faktyczną zmianę użytkownika w skrypcie, wprowadzenie hasła użytkownika i uruchomienie programu?
-m
parametr zachowuje środowisko powłoki wywołującej, więc$HOME
pozostanie ustawiony na,/root
jeśli zostanie wywołany z powłoki root. Dlaczego go używałeś? I dlaczego dzwonisz do powłoki Bourne'a, aby uruchomićbash
skrypt?[bash]
i zaczyna się od: „Uruchamiam skrypt bash ...”. W dzisiejszych czasach nie jest używane Bash, ponieważ jest to domyślna powłoka w większości dystrybucji Linuksa. Jeśli twój skrypt zaczyna się od#!/bin/bash
lub#!/bin/sh
, to określi, która powłoka jest używana, niezależnie od powłoki, z której został uruchomiony. Na marginesie, jest to wspólny programsh
ibash
jest to ten sam program, z przełącznikami określającymi, jakiej składni należy użyć. Odpowiem na twoje pytanie, aby inni mogli zobaczyć, że jest odpowiedź,Odpowiedzi:
Jeśli użyjesz
-m
parametru zsu
, przekaże on twoje aktualne środowisko do wykonywanego polecenia lub powłoki. W szczególności$HOME
zmienna zostanie ustawiona na wartość w powłoce wywołującej i nie będzie określana przez wywoływanego użytkownika.Tak więc, jeśli jesteś zalogowany jako
root
,$HOME
pozostanie/root
i pozostanie taki, kiedy wykonaszscript.sh
podsu -m
. O ile nie istnieją inne elementy środowiska, które chcesz zachować, można po prostu pominąć-m
zsu
rozmowy.źródło