Adicione o zsh a /etc/shells :
command -v zsh | sudo tee -a /etc/shells
Agora você pode usar o chsh para definir o zsh como shell:
sudo chsh -s "$(command -v zsh)" "${USER}"
Veja esta documentação: Alterando seu shell de login
Eu instalei o ZSH em uma VM minha, onde eu compilei a partir da fonte. O local do ZSH é /usr/local/bin/zsh quando eu executo chsh -s /usr/local/bin/zsh ele gera chsh: /usr/local/bin/zsh is an invalid shell . Eu também tentei isso com o sudo também. Como posso mudar isso?
Adicione o zsh a /etc/shells :
command -v zsh | sudo tee -a /etc/shells
Agora você pode usar o chsh para definir o zsh como shell:
sudo chsh -s "$(command -v zsh)" "${USER}"
Veja esta documentação: Alterando seu shell de login
Você precisa adicionar /usr/local/bin/zsh a /etc/shells .
Primeiro, verifique se zsh está listado como um shell válido por
cat /etc/shells
Se zsh não estiver listado, instale-o. Por exemplo, se você usa apt
sudo apt-get install zsh
Execute a etapa 1 novamente e veja o caminho de zsh . No meu caso, /usr/bin/zsh e /usr/zsh estão listados.
Como @ Stéphane Chazelas mencionou no comentário, se você gosta de compilar e instalar o shell do zero, certifique-se de adicionar o caminho em /etc/shells .
Altere o shell usando
chsh -s /usr/bin/zsh
Na página de manual :
-s, --shell SHELLThe name of the user's new login shell. Setting this field to blank causes the system to select the default login shell.
Faça o logout e faça login novamente.