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.
/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ę.