Dlaczego nie mogę zmienić powłoki poleceniem chsh?

12

Nauczyłem się nowego polecenia, przynajmniej tak mi się wydawało, ponieważ to polecenie: chshnie zachowuje się tak, jak opisano.

Opisano, że działa w ten sposób:

  1. cat /etc/shells wiedzieć, które powłoki są zainstalowane, więc możesz wybierać spośród nich.
  2. zrobić echo $SHELL, aby wiedzieć, co powłoki używasz.
  3. wybierz jedną z muszli i wpisz chsh -s /path/to/shell
  4. wprowadź hasło i sprawdź echo $SHELL, czy jesteś w nowej powłoce.

Zrobiłem to i nie otrzymałem komunikatu o błędzie podczas wprowadzania hasła, ale wciąż byłem w tej samej powłoce.

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash
rekin
źródło
5
Musisz się najpierw wylogować i zalogować.
Rui F Ribeiro
7
Nie publikuj zdjęć tekstu terminalu. Można go skopiować i wkleić w treści pytania i naprawdę nie ma potrzeby publikowania zdjęć, chyba że wyświetlasz usterkę graficzną lub coś podobnego.
Sergiy Kolodyazhnyy
Zredagowałem swój post, usunąłem obraz i wkleiłem tekst, ale obraz wrócił w ciągu nocy.
rekinant
@sharkant Wygląda na to, że ktoś miał edycję w kolejce recenzji i został zatwierdzony, co zredagowało Twój post po fakcie. Myślałem, że system edycji SE nie zastąpi nowej edycji starą, ale heh, kto wie?
Zan Lynx

Odpowiedzi:

19

Wyloguj się i zaloguj ponownie.

chshKomenda aktualizuje /etc/passwdplik, ale to nie zmienia bieżącej powłoki ani wartość $SHELLzmiennej w bieżącej powłoki (nie ma możliwości robienia tego). To jest powód, dla którego musisz się ponownie zalogować; musisz rozpocząć nową sesję logowania, aby zmiana zaczęła obowiązywać.

Kusalananda
źródło
Nie rozumiem, co to jest powłoka logowania i skąd mam wiedzieć, że jestem w powłoce logowania lub jakiejś powłoce, która się nie loguje. Jak rozpocząć nową sesję logowania?
rekinant
1
@sharkant Chodzi o to, że informacje, które zmieniłeś w, /etc/passwdnie są odczytywane, dopóki nie zalogujesz się następnym razem. Musisz wylogować się całkowicie i zalogować ponownie, aby zmiana zaczęła obowiązywać. Jeśli się to nie powiedzie, ponowne uruchomienie komputera będzie również działać.
Kusalananda
1
Myślę, że tym razem cię rozumiem: więc polecenie chsh -s / path / to / shell nie zmienia natychmiast powłoki, w której się znajduję, ale zmienia wpis w pliku / etc / passwd, który zadziała po uruchomieniu powłoki?
rekinant
@sharkant Dokładnie tak to działa! Cieszę się, że w końcu zrozumiałem twoje nieporozumienie. Zaktualizuję odpowiedź.
Kusalananda
1

Użycie polecenia narzędzia usermod działało w moim przypadku. Działa na Ubuntu 18.04.

  1. Najpierw sprawdź bieżącą wartość

grep nameofuser /etc/passwd

  1. Zmień to

sudo usermod --shell /bin/bash nameofuser

  1. Sprawdź to

grep nameofuser /etc/passwd

sandip
źródło