Poszukaj tutaj doskonałego wyjaśnienia i rozwiązania opublikowanego przez @ mklement0 [w związku z bash
problemem aktualizacji.
Miałem podobny problem z działaniem odwrotnym w moim systemie (OS X 10.10.1): bash
ponownym ustawieniem domyślnej powłoki logowania po zainstalowaniu oh-my-zsh
, która stała zsh
się domyślną, a następnie uaktualnieniem bash
z 3.2.53 do 4.3.30 za pomocą Homebrew ( dlaczego Apple wysyła Yosemite ze starą bash
wersją?).
Myślę, że SHELL
zmienna ś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 bash
okno powłoki z terminala $ export SHELL="/bin/zsh"; echo "$SHELL"
, pokazałby się, /bin/zsh
ale nie nastąpi żadna faktyczna zmiana, ponieważ jeśli otworzysz nowe okno powłoki z terminala i zrobisz $ echo $0
to, zobaczysz -bash
( $0
zawiera 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 UserShell
wł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/zsh
robi jest zmienić tę UserShell
właściwość, aby ustawić go zsh
- można to sprawdzić wykonując dscl . -read /Users/$USER/ UserShell
zaraz potem, a zobaczysz UserShell: /bin/zsh
. Ale zmiana nie zostanie wprowadzona w bieżącym oknie, dopóki nie zrobisz czegoś takiego exec su - $USER
jak sugerowane przez @ mklement0, lub dopóki nie zamkniesz i nie otworzysz okna powłoki.
/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ę.