chsh nie zmienia $ SHELL

9

Mam pewne trudności ze zmianą wartości $SHELLw aplikacji iTerm OSX. iTerm zaczyna się /bin/zsh, ale wartość $SHELLnie wydaje się zmieniać.

Co ja zrobiłem:

  1. Zmieniono „polecenie” jak /bin/zshw oknie konfiguracji iTerm.
  2. Wykonano, chshaby zmienić powłokę na /bin/zsh.
  3. Potwierdzony Uruchomiono iTerm /bin/zsh

UWAGA 1: W aplikacji terminalowej OSX „Terminal.app”:

echo $SHELL
/bin/zsh

UWAGA 2: W popularnej aplikacji terminalowej OSX „iTerm.app”:

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
melvynkim
źródło
1
Zaglądałeś /etc/shells? Podręcznik stwierdza, że ​​jeśli określona powłoka nie znajduje się w tym pliku, nie jest uważana za standardową powłokę.
Bob Dalgleish

Odpowiedzi:

5

Problem polegał na konflikcie ustawień aplikacji „iTerm” z powłoką. Aby rozwiązać, zresetowałem polecenie „powłoki logowania” w oknie preferencji iTerm:

iTerm.app -> Preferencje -> Profile -> Ogólne -> Polecenie -> Kliknij „Powłoka logowania”

Następnie wykonałem chshmodyfikację jako /bin/zsh.

Aby odtworzyć problem (mając $ SHELL ustawioną jako /bin/bash/, mimo że jest to powłoka logowania /bin/zsh), po prostu musiałem zmienić ustawienie „iTerm” z powrotem na „Command: / bin / zsh /”.

melvynkim
źródło
1

-sFlaga dla chshjedynie próbami zmienić powłokę, i prawdopodobnie nie powiedzie się z powodu Open Directory: zwykłym systemie UNIX „chsh” byłoby zmodyfikować /etc/passwdwpis. Byłem jednak w stanie uruchomić chshbez argumentów, co dało mi edytor i następujące informacje:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

Byłem w stanie edytować wpis „Shell:” /bin/zsh, a kolejne okna terminala otworzyły się z poleceniem Z-shell.

Nevin Williams
źródło
Próbowałem chshbez argumentów. Wciąż nie ma szczęścia. Zmienna się nie zmienia. W rzeczywistości, gdy edytor został załadowany, pokazywał /bin/zsh.
melvynkim
Spróbuj zmienić powłokę za pomocą edytora. Zrobiłem zrzut ekranu z mojej zmiany z / bin / tcsh na / bin / zsh iz powrotem. bonmot.ca/~nevin/chsh.mov
Nevin Williams
Dziękujemy bardzo za poświęcenie czasu na nagrywanie screencastu! Twoje rozwiązanie powinno działać na innych emulatorach terminali, ale nie mogłem tego zmienić $SHELLw iTerm. Szczegółowe informacje znajdują się w mojej odpowiedzi. Dzięki!
melvynkim
1

Poszukaj tutaj doskonałego wyjaśnienia i rozwiązania opublikowanego przez @ mklement0 [w związku z bashproblemem aktualizacji.

Miałem podobny problem z działaniem odwrotnym w moim systemie (OS X 10.10.1): bashponownym ustawieniem domyślnej powłoki logowania po zainstalowaniu oh-my-zsh, która stała zshsię domyślną, a następnie uaktualnieniem bashz 3.2.53 do 4.3.30 za pomocą Homebrew ( dlaczego Apple wysyła Yosemite ze starą bashwersją?).

Myślę, że SHELLzmienna środowiskowa odzwierciedla, ale nie kontroluje rzeczywistej domyślnej powłoki logowania dla użytkownika. Na przykład, jeśli powiedzmy, bashże byłeś domyślny i otworzyłeś nowe bashokno powłoki z terminala $ export SHELL="/bin/zsh"; echo "$SHELL", pokazałby się, /bin/zshale nie nastąpi żadna faktyczna zmiana, ponieważ jeśli otworzysz nowe okno powłoki z terminala i zrobisz $ echo $0to, zobaczysz -bash( $0zawiera nazwę i ścieżkę polecenia, które uruchomiło okno powłoki, w tym przypadku bash, a -obok niego oznacza, że ​​jest to powłoka logowania).

Jak wskazał @ mklement0, rzeczywista domyślna powłoka logowania użytkownika jest kontrolowana przez UserShellwłaściwość w rekordzie użytkownika w wewnętrznej bazie danych systemu - można to sprawdzić i zaktualizować za pomocą narzędzia wiersza poleceń dscl. Informacje te zostaną przekazane do Twojej aplikacji terminalowej po otwarciu okna powłoki.

Co chsh -s /bin/zshrobi jest zmienić tę UserShellwłaściwość, aby ustawić go zsh- można to sprawdzić wykonując dscl . -read /Users/$USER/ UserShellzaraz potem, a zobaczysz UserShell: /bin/zsh. Ale zmiana nie zostanie wprowadzona w bieżącym oknie, dopóki nie zrobisz czegoś takiego exec su - $USERjak sugerowane przez @ mklement0, lub dopóki nie zamkniesz i nie otworzysz okna powłoki.

ramius
źródło
0

Spróbuj wykonać polecenie: chsh -s /bin/zshz domyślnego terminala Mac.

mohitmayank
źródło
1
Co to robi inaczej niż PO?
JMY1000,
@ JMY1000 Jeśli spróbujesz wykonać to polecenie z iTerm, zmiany nie zostaną odzwierciedlone. Powinieneś być w stanie uruchomić go, uruchamiając go z domyślnego terminala Mac.
mohitmayank