Chcę utworzyć skrypt bash, który musi zostać wykonany za pomocą sudo, ale powinien uwzględniać nazwę użytkownika niebędącego sudo, który go wykonał. Więc jeśli użytkownik bob
uruchomi sudo ./myscript.sh
, chciałbym myscript.sh
wiedzieć, że bob
to on go wykonał.
Zajrzyjmy do środka myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Jak poznać nazwę użytkownika, który utworzył proces? Mówiąc dokładniej, czego powinienem użyć zamiast, whoami
aby dostać, bob
a nie root
?
bash
shell-script
sudo
users
marcio
źródło
źródło
USER=$(whoami)
. Zauważ, żeUSER
już istnieje jako wewnętrzna zmienna powłoki. Ponadto, jeśli jest to skrypt bash, nie uruchamiaj go przy użyciush
, który ma tylko podzbiór funkcji zgodny z POSIX.#!/usr/bin/env bash
na moich skryptach bash.sh
lub czegoś innego.Odpowiedzi:
Nie jestem pewien, jak jest to standard, ale przynajmniej w systemach Ubuntu
sudo
ustawia następujące zmienne środowiskowe (między innymi - patrzENVIRONMENT
sekcja strony podręcznika sudo):na przykład,
źródło
Jeśli chcesz, aby działał również bez
sudo
, użyj${SUDO_USER:-$USER}
. Na przykład:Wyjaśnienie
${var:-val}
rozwinie się do$var
, chyba że jest rozbrojony lub pusty, w którym to przypadku będzie rozwinięty doval
.źródło