Mam USER
zmienną w swoim skrypcie i chcę zobaczyć jego HOME
ścieżkę na podstawie tej USER
zmiennej. Jak mogę to zrobić?
bash
shell-script
users
MatthewRock
źródło
źródło
~foo
ze zmiennymi wbash
. W każdym razie nie bezpośrednio.~
wydaje się kartę rozwinąć, choć i inny spec''d zachowanie przedrostkiem tyldy zostaje zastąpiony przez ścieżkę początkowego katalogu roboczego związanego z nazwą logowania uzyskanych przy użyciugetpwnam()
funkcji i tak pewnie, że wyszukiwanie jest całkiem dobry. Jednak nie lubię rozszerzeń tabulatorów - lubię pisać tabulatory.Możesz użyć,
eval
aby uzyskać czyjś katalog domowy.To działa na pewno przynajmniej dla lokalnych użytkowników. Nie wiem, czy zdalni użytkownicy, tacy jak LDAP, są obsługiwani
eval
.źródło
eval
jest potrzebne. Bash nie przetwarza~foo
po rozwinięciu zmiennej.USER
.$USER
rozwija się do zaledwie jednym ciągiem znaków alfabetycznych.Zwykle jest to miejsce
/home/$USER
, ale to nie musi być uniwersalne. Ostateczne miejsce wyszukiwania takich informacji znajduje się w pliku/etc/passwd
.Ten plik jest czytelny na całym świecie (każdy może go przeczytać), więc każdy użytkownik ma dostęp do jego zawartości.
Jeśli w pliku istnieje US $, pozycja poprzedzająca przedostatnia to katalog HOME użytkownika.
Spowoduje to wybranie wpisu i wydrukowanie katalogu HOME:
W przypadku bardziej złożonych (zdalnych) systemów getent jest zwykłą komendą do uzyskiwania informacji o użytkownikach z systemu NSS (bibliotek usług przełączania nazw).
Polecenie
Dostarczy równoważne informacje (jeśli są dostępne).
źródło
Jeśli użytkownik nie istnieje,
getent
zwróci błąd.Oto mała funkcja powłoki, która nie ignoruje kodu wyjścia
getent
:Oto przykład użycia:
źródło
Jeśli jesteś zalogowany jako root, znasz
USER
hasło lub jeśliUSER
nie ma hasła, następująca opcja jest następująca:W przypadku standardowego
su
zachowania, jeśliUSER
jest niezdefiniowany lub pusty, wówczassu
spróbuje uruchomić polecenie jako root.Jeśli wartość
USER
nie jest prawidłowa nazwa użytkownika, a następnie odpowiedni błąd zostanie podniesiona:su: user <user> does not exist
.Jest tu już wiele dobrych odpowiedzi, ale to może komuś pomóc.
źródło