Jak zmienić domyślną powłokę na ZSH - chsh mówi „niepoprawna powłoka”

36

Zainstalowałem ZSH na mojej maszynie wirtualnej, gdzie skompilowałem go ze źródła. Lokalizacja ZSH jest /usr/local/bin/zshwtedy, gdy uruchamiam chsh -s /usr/local/bin/zshto wyjście chsh: /usr/local/bin/zsh is an invalid shell. Próbowałem tego również z sudo. Jak mogę to zmienić?

Zach Russell
źródło
możliwy duplikat Gdzie mogę zmienić powłokę?
Mikel
6
@Mikel, nie, to pytanie brzmi „nie wiem o chsh”, a nie „ chshnie działa dla mnie”.
cjm

Odpowiedzi:

48

Dodaj zsh do /etc/shells:

command -v zsh | sudo tee -a /etc/shells

Możesz teraz użyć chsh, aby ustawić zsh jako powłokę:

sudo chsh -s "$(command -v zsh)" "${USER}"

Zobacz tę dokumentację: Zmiana powłoki logowania

Biapy
źródło
8

Musisz dodać /usr/local/bin/zshdo /etc/shells.

Adam Lang
źródło
3

Najpierw sprawdź, czy zshjest wymieniony jako poprawna powłoka

cat /etc/shells

Jeśli zshnie ma go na liście, zainstaluj go. Na przykład, jeśli używaszapt

sudo apt-get install zsh

Wykonaj krok 1 ponownie i zobacz ścieżkę zsh. W moim przypadku, zarówno /usr/bin/zshi /usr/zshznajduje się na liście. Jak wspomniano w komentarzu @ Stéphane Chazelas, jeśli chcesz skompilować i zainstalować powłokę od zera, dodaj ścieżkę do /etc/shells.

Zmień powłokę za pomocą

chsh -s /usr/bin/zsh

Ze strony podręcznika :

-s, --shell SHELLNazwa nowej powłoki logowania użytkownika. Ustawienie tego pola na puste powoduje, że system wybiera domyślną powłokę logowania.

Wyloguj się i zaloguj ponownie.

Sat Yam
źródło
Tak, jeśli zainstalujesz powłokę jako część pakietu systemu operacyjnego, pakiet systemu operacyjnego zazwyczaj doda powłokę do /etc/shells. Chodzi o to, że jeśli ręcznie skompilujesz i zainstalujesz powłokę, musisz ręcznie dodać ścieżkę do /etc/shellssiebie.
Stéphane Chazelas
Słuszna uwaga. Myślałem o menedżerze pakietów, takim jak „apt”. Zredagowałem odpowiedź, aby uwzględnić Twój punkt widzenia.
Sob Yam
Jest to jednak zasadniczo to, co już powiedzieli dwie pozostałe odpowiedzi.
Jeff Schaller