Haciendo ZSH Shell predeterminado en MacOSX [cerrado]

98

Instalé zsh en mi Mac. y ahora quiero convertirlo en el shell predeterminado en lugar de Bash. Pero parece que me estoy encontrando con el siguiente error:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell
Harsha MV
fuente
1
¿Qué chsh -lsalida? (Si eso no funciona, ¿cuál es el contenido /etc/shells?) ¿Está seguro de que esto está fallando y no solo una advertencia? ¿Agregar /usr/bin/zshallí hace que esto funcione?
Etan Reisner
1
chsh: la opción requiere un argumento - l uso: chpass [-l ubicación] [-u authname] [-s shell] [usuario]
Harsha MV
/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV
¿Qué pasa con /bin/zsh?
jxh
1
Existe una forma oficial de cambiar el shell predeterminado a zsh ahora. Consulte el documento de Apple "Use zsh como shell predeterminado en su Mac" support.apple.com/en-ca/HT208050
Anthonyeef

Respuestas:

86

3 sencillos pasos:

  1. which zshesto te da tu camino a zsh
  2. Luego chsh -s /bin/zsho reemplace la ruta a su zsh si es diferente
  3. Reinicia tu máquina
Quentin Perez
fuente
sí, eso funcionó. ¿Es específico de Yosemite?
Harsha MV
2
No, no lo creo, fue solo para tu información :)
Quentin Perez
8
Otro comentario relevante sobre la misma pregunta anterior que dice agregar /usr/bin/zshpara /etc/shellsresuelve el problema.
Brice
Funciona perfecto
Olkunmustafa
1
¡Configúrelo de acuerdo con / etc / shells! Busque la ruta zsh con '$ nano / etc / shells'. El mío estaba en / bin / zsh en lugar de / usr / bin / zsh el 10.12.2
oikonomopo
187

La respuesta correcta debería haber abordado su problema:

chsh: / usr / bin / zsh: shell no estándar

La razón por la que este es el caso es porque chshsolo aceptará shells que estén definidos en el archivo / etc / shells, como puede ver al leer el manual para chsh:

chsh aceptará la ruta completa de cualquier archivo ejecutable en el sistema. Sin embargo, emitirá una advertencia si el shell no aparece en el archivo / etc / shells.

Para resolver este problema y hacer que zsh sea el shell predeterminado, debe:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

Obviamente, supongo que eso zshestá en tu camino aquí. Esta solución también funcionará si, por ejemplo, elige instalar la última versión zshcon brew install zsh.

EDITAR (gracias por ThisIsFlorianK por el comentario) :

Dependiendo de la configuración de su shell, puede recibir un mensaje que diga /etc/shells: Permission denied. Puede encontrar información sobre este problema aquí. Para solucionarlo, utilice lo siguiente en su lugar:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)
dangom
fuente
4
esto es más exacto que la respuesta aceptada en mi opinión. asumiendo que zsh está instalado en / usr / bin / zsh, las otras respuestas no funcionan. Funcionaron para OP porque, de forma predeterminada, Apple instala zsh en / bin / zsh. Sin embargo, si quisiera usar zsh de homebrew (que está instalado en / usr / local / bin / zsh), esta sería la forma correcta de hacerlo
verboze
Tengo "bash: / etc / shells: Permiso denegado". La respuesta a través de Preferencias del sistema funcionó para mí.
Ricardo Stuven
44
Si obtiene el /etc/shells: Permission denied==> Haga eso en su lugar: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK
1
stackoverflow.com/a/44547726/99834 : funcionó sin alterar los archivos del sistema. Lo único que falta es una versión CLI para realizar la misma operación.
sorin
@sorin ¿Este voto negativo es un vandalismo gratuito o hay algo realmente malo en la respuesta? Los archivos del sistema son archivos de texto editables por una razón. chshestá disponible por defecto por una razón. Aunque no hay nada intrínsecamente malo en hacer clic en un montón de menús para lograr lo mismo, eso no solo es intransitable y propenso a errores, sino que también es engañoso porque oculta a los usuarios de donde proviene el cambio.
dangom
52

Pude hacer que esto funcionara haciendo lo siguiente:

  1. Ir a Preferencias del sistema
  2. Haga clic en "Usuarios y grupos"
  3. Haga clic en el candado para realizar cambios.
  4. Haga clic derecho en el usuario actual -> Opciones avanzadas
  5. Cambie el shell de inicio de sesión a / bin / zsh en el menú desplegable.
  6. Abra una nueva terminal y verifique con echo $SHELL
Nate Jenson
fuente
4
si instala zsh a través de homebrew, colocará zsh en /usr/local/bin/zsh. Por lo tanto, deberá editar /etc/shellsen sudo y agregar una entrada para /usr/local/bin/zshantes de poder seleccionar el ejecutable zsh que instaló hombrew
Baldy
7

En mi MacBook de trabajo tuve que hacer esto:

sudo chsh -s /usr/local/bin/zsh my_user_name

Luego tuve que crear un .bash_profilearchivo para que mi terminal cambiara a z-shell cada vez que lo abría:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

La última idea fue tomada de aquí .

sakovias
fuente