Dlaczego kiedy przełączam użytkownika, su <username>
a następnie wykonuję dane who am i
wyjściowe, poprzedni użytkownik, do którego mnie zalogowano, a nie ten, do którego się przełączyłem?
9
Prawdopodobnie używasz niewłaściwego polecenia.
who
służy do pokazania, kto jest zalogowany, tj. który użytkownik jest właścicielem terminala. Zwraca taką linię:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
oznacza pokazanie, jaki jest efektywny identyfikator użytkownika osoby, która go obsługuje. Zwraca tylko jedną nazwę, taką jak ta (i jest równoważna z uruchomieniem id -un
):
ckhan
Myślę, że dosłownie napisałeś who am i
na terminalu, który działał who
z dwoma ignorowanymi argumentami ( am
, i
).
Zobacz man who
i man whoami
po więcej szczegółów.
am
ii
nie są ignorowane, są nawet określone przez POSIX: „W ustawieniach regionalnych POSIX ogranicz wynik do opisu wywołującego użytkownika, równoważnego-m
opcji”.Na mojej stronie podręcznika systemu Ubuntu 12.04.2 dla polecenia „kto”, „kim jestem” (lub kto z dwoma argumentami) jest taki sam jak „kto -m” i powinien dać ci nazwę hosta i użytkownika powiązanego ze STDIN. Jednak nie otrzymuję danych wyjściowych z „kim jestem”. Albo strona podręcznika jest nieprawidłowa, albo polecenie zawiera błąd. Niezależnie od tego, jak wcześniej odpowiedział ckhan, polecenie „whoami” poda nazwę użytkownika dla efektywnego identyfikatora użytkownika. Przynajmniej w Ubuntu 12.04.2 żaden identyfikator, „kim jestem” ani „whoami” nie podadzą tylko nazwy użytkownika zalogowanego na bieżącym terminalu. Aby obejść ten problem, możesz:
źródło
Obejście :
który działa jako zamiennik z
who am i | awk '{print $1}'
. Objaśnienie poniżej:W wielu systemach „
who am i
” jest równoważne z „who -m
”. Problem polega na tym, że w przypadku niektórych terminali „who -m
” nic nie zwraca!Przykład nr 1 jest uruchamiany z terminala xfce4
ale przykład # 2 z terminala gnome (ten sam komputer, te same polecenia)
Wydaje się, że jest to konsekwencja braku dodawania wpisów utmp przez terminal gnome…
źródło
stat
zamiast tego:stat -c '%U' "$(tty)"
Prawdopodobnie nie powinieneś również parsowaćwho am i
, ponieważ nazwy użytkowników mogą zawierać spacje w rzadkich przypadkach.