Jak mogę określić wywołującego użytkownika w skrypcie poinstalacyjnym instalatora Apple

2

Chcę zbudować instalator Apple .pkg, w którym uruchamiam skrypt poinstalacyjny po skopiowaniu plików przez instalatora. Skrypt jest uruchamiany i wszystko działa idealnie oprócz tego, że wszystkie polecenia w skrypcie są uruchamiane jako root.

Pytanie brzmi: w jaki sposób mogę określić identyfikator użytkownika, który faktycznie wywołał instalatora.

who -m

zwraca wywołującego użytkownika, gdy uruchamiam skrypt w wierszu poleceń za pomocą sudo. Ale zwraca, rootgdy uruchomię go w instalatorze.

Czy jest jakiś sposób na uzyskanie „faktycznego użytkownika”?

Dzięki za pomoc!

Michael Lihs
źródło

Odpowiedzi:

3

Po kilku testach wydaje mi się, że jedną z najlepszych opcji jest

INSTALLER_USER=$(stat -f '%Su' $HOME)

Przekonałem się, że $HOMEzmienna środowiskowa użytkownika instalującego pakiet jest przekazywana, nawet po podniesieniu Installer.appuprawnień lub użyciu installerpolecenia.

Poprzednie odpowiedzi zakładają pewne rzeczy dotyczące środowiska, które nie zawsze są prawdziwe.

Na przykład CONSOLE_USER=$(ps aux | grep console | grep -v grep | cut -d' ' -f1)nie działa, gdy zalogowanych jest wielu użytkowników, co może mieć miejsce w środowisku laboratorium komputerowego.

Co do ps aux | grep "CoreServices/Installer" | grep -v grep | awk '{print $1;}'; działa to tylko wtedy, gdy użytkownik faktycznie działa Installer.appi nie będzie miało zastosowania do kogoś, kto uruchomi go z installerpoleceniem w powłoce.

n8felton
źródło
1

Możesz ustalić, kto jest właścicielem „konsoli” i wywołać sudo -upolecenie.

Coś takiego:

CONSOLE_USER=$(ps aux | grep console | grep -v grep | cut -d' ' -f1)
sudo -u $CONSOLE_USER COMMAND_TO_EXECUTE
Mateusz Szlosek
źródło
Teraz robię coś podobnego i grep dla użytkownika, który rozpoczął proces instalatora ps aux | grep "CoreServices/Installer" | grep -v grep | awk '{print $1;}'Ale czy to naprawdę „droga”?
Michael Lihs
Rozwiązałem mój problem i wydaje się być bardziej stabilny niż moje rozwiązanie, ponieważ nazwa instalatora nie jest zaangażowana. Wielkie dzięki!
Michael Lihs