Mam pewne trudności ze zmianą wartości $SHELL
w aplikacji iTerm OSX. iTerm zaczyna się /bin/zsh
, ale wartość $SHELL
nie wydaje się zmieniać.
Co ja zrobiłem:
- Zmieniono „polecenie” jak
/bin/zsh
w oknie konfiguracji iTerm. - Wykonano,
chsh
aby zmienić powłokę na/bin/zsh
. - 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
/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ę.Odpowiedzi:
Problem polegał na konflikcie ustawień aplikacji „iTerm” z powłoką. Aby rozwiązać, zresetowałem polecenie „powłoki logowania” w oknie preferencji iTerm:
Następnie wykonałem
chsh
modyfikację 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 /”.źródło
-s
Flaga dlachsh
jedynie próbami zmienić powłokę, i prawdopodobnie nie powiedzie się z powodu Open Directory: zwykłym systemie UNIX „chsh” byłoby zmodyfikować/etc/passwd
wpis. Byłem jednak w stanie uruchomićchsh
bez argumentów, co dało mi edytor i następujące informacje:Byłem w stanie edytować wpis „Shell:”
/bin/zsh
, a kolejne okna terminala otworzyły się z poleceniem Z-shell.źródło
chsh
bez argumentów. Wciąż nie ma szczęścia. Zmienna się nie zmienia. W rzeczywistości, gdy edytor został załadowany, pokazywał/bin/zsh
.$SHELL
w iTerm. Szczegółowe informacje znajdują się w mojej odpowiedzi. Dzięki!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 zainstalowaniuoh-my-zsh
, która stałazsh
się domyślną, a następnie uaktualnieniembash
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ś nowebash
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 przypadkubash
, 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ć gozsh
- można to sprawdzić wykonującdscl . -read /Users/$USER/ UserShell
zaraz potem, a zobaczyszUserShell: /bin/zsh
. Ale zmiana nie zostanie wprowadzona w bieżącym oknie, dopóki nie zrobisz czegoś takiegoexec su - $USER
jak sugerowane przez @ mklement0, lub dopóki nie zamkniesz i nie otworzysz okna powłoki.źródło
Spróbuj wykonać polecenie:
chsh -s /bin/zsh
z domyślnego terminala Mac.źródło