Cómo cambiar el shell predeterminado a ZSH - chsh dice "shell no válido"

36

Instalé ZSH en una máquina virtual mía, donde lo compilé desde la fuente. La ubicación de ZSH es /usr/local/bin/zshcuando ejecuto chsh -s /usr/local/bin/zshsalidas chsh: /usr/local/bin/zsh is an invalid shell. También probé esto con sudo también. ¿Cómo puedo cambiar esto?

Zach Russell
fuente
posible duplicado de ¿Dónde cambio mi shell?
Mikel
66
@Mikel, no, esa pregunta es "No sé sobre chsh" en lugar de " chshno está funcionando para mí".
cjm

Respuestas:

48

Agregue zsh a /etc/shells:

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

Ahora puede usar chsh para establecer zsh como shell:

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

Consulte esta documentación: Cambiar su shell de inicio de sesión

Biapy
fuente
8

Necesitas agregar /usr/local/bin/zsha /etc/shells.

Adam Lang
fuente
3

Primero, verifique si zshestá listado como un shell válido por

cat /etc/shells

Si zshno está en la lista, instálelo. Por ejemplo, si usasapt

sudo apt-get install zsh

Haz el paso 1 nuevamente y ve el camino de zsh. En mi caso, ambos /usr/bin/zshy /usr/zshestá en la lista. Como @ Stéphane Chazelas mencionó en el comentario, si desea compilar e instalar el shell desde cero, asegúrese de agregar la ruta /etc/shells.

Cambiar el caparazón usando

chsh -s /usr/bin/zsh

Desde la página del manual :

-s, --shell SHELLEl nombre del nuevo shell de inicio de sesión del usuario. Establecer este campo en blanco hace que el sistema seleccione el shell de inicio de sesión predeterminado.

Cerrar sesión e iniciar sesión nuevamente.

Sáb ñame
fuente
Sí, si instala el shell como parte de un paquete del sistema operativo, el paquete del sistema operativo generalmente agregará el shell /etc/shells. El punto aquí es que si compila e instala el shell a mano, también necesita agregar la ruta a /etc/shellsusted mismo a mano.
Stéphane Chazelas
Buen punto. Estaba pensando en un administrador de paquetes como 'apt'. He editado la respuesta para incluir su punto.
Sábado Yam
Sin embargo, esto es esencialmente lo que las otras dos respuestas ya han dicho.
Jeff Schaller