¿Cómo hacer que zsh se ejecute como un shell de inicio de sesión en Mac OS X (en iTerm)?

149

Cuando zsh se configura como un shell de inicio de sesión en Mac OS X, cuando iTerm lo inicia, zsh no considera que se ejecute como un shell de inicio de sesión, aunque se inicia como '-zsh' ('-' se coloca como el primer carácter de arg [0]) que se supone que significa que debe comenzar como un shell de inicio de sesión.

Entonces, cuando configuro el shell de inicio de sesión en bash, bash reconoce este primer '-' en $ 0 y se ejecuta como un shell de inicio de sesión, pero zsh no, aunque parece que debería.

¿Hay alguna manera de hacer que zsh reconozca el '-' en el argumento [0], o hacer que iTerm ejecute el shell con un argumento de línea de comando --login?

Ivan Tarasov
fuente
2
Sé que ha pasado un tiempo desde que se le preguntó esto, pero considere aceptar la respuesta de @Harold Putman. Es el único en el que se aborda la pregunta.
Craig S. Cottingham

Respuestas:

106

En iTerm -> Preferencias -> Pestaña Perfiles -> Sección General establezca Comando en: / bin / zsh --login

/ bin / zsh --login

Harold Putman
fuente
1
iterm2 no parece tener esta opción en la pestaña General. ¿Alguna idea de cómo lograrlo en iterm2 sin cambiar el shell de inicio de sesión?
Lloyd Dewolf
66
Es la pestaña general en la pestaña Perfiles.
Harold Putman
¡Ajá! Eso es confuso de que haya una pestaña General y Perfiles> General.
Lloyd Dewolf
2
o en mi caso/usr/local/bin/zsh --login
Yar
Estoy usando esto para cambiar mi shell en lugar de editar los / etc / shells, ya que esto debería evitar que un problema con mi shell quede inutilizable después de una actualización.
sal
220
chsh -s $(which zsh)

Se le pedirá su contraseña, pero una vez que actualice su configuración, cualquier sesión nueva de iTerm / Terminal que inicie en esa máquina pasará de forma predeterminada a zsh.

Damien Wilson
fuente
2
Por favor, lea la pregunta primero. El problema no está en establecer el shell predeterminado, el problema es que zsh no está detectando que se inicia como un shell de inicio de sesión.
Ivan Tarasov
1
Ah, mis disculpas. ¿Has intentado usar la bandera -i para forzar a zsh a comenzar en modo interactivo?
Damien Wilson el
11
Su respuesta hace que zsh se ejecute como un shell de inicio de sesión en Mac OS X en iTerm. Simplemente no se trata de hacerlo de la manera que usted describe tratando de hacerlo. Pero resuelve el problema que presenta la pregunta (en el título, en lugar de en el cuerpo). La pregunta con la que termina en el cuerpo es una pregunta completamente diferente. Si esa es su pregunta real (en lugar de cómo hacer que zsh se ejecute como shell de inicio de sesión), tal vez debería reformular la pregunta en el título.
iconoclasta
45
Si chshle dice algo así como "shell no estándar", significa que debe agregar la ruta del nuevo shell /etc/shells. Esto puede suceder si está cambiando, por ejemplo, a una versión de zsh instalada por homebrew, que la coloca /usr/local/bin/zsh.
shovavnik
1
chsh -s $(which zsh)se puede usar para garantizar la ruta correcta.
Daniel Doezema
56

Vaya al panel Usuarios y grupos de las Preferencias del sistema -> Seleccione el usuario -> Haga clic en el candado para realizar cambios (esquina inferior izquierda) -> haga clic con el botón derecho en el usuario actual, seleccione Opciones avanzadas ... -> Seleccione el Shell de inicio de sesión: / bin / zsh y OK

Arunkumar
fuente
3
Esto me salvó el día. Estoy en osx mavericks.
qed
Esto funciona para el zsh predeterminado, no para el instalado por brew.
Imam Bux
19

El comando para cambiar el shell al inicio es chsh -s <path_to_shell>. Los shells predeterminados en mac OS X se instalan dentro del bindirectorio, por lo que si desea cambiar al predeterminado zsh, usaría lo siguiente

chsh -s /bin/zsh

Si está utilizando una versión diferente de, zshentonces es posible que deba agregar esa versión /etc/shellspara evitar el mensaje de shell no estándar. Por ejemplo, si desea la versión de home-brew, zshdebe agregar /usr/local/bin/zshal archivo mencionado anteriormente lo que puede hacer en un comando sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"y luego ejecutar

chsh -s /usr/local/bin/zsh

O si desea hacer todo en un solo comando, simplemente copie y pegue esto si ya tiene instalado zsh

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh
hasanain
fuente
2
No creo que fuera justo rechazar esta respuesta. Atrezzo ya que es el único que menciona /etc/shellsen el cuerpo de la respuesta misma.
heymatthew
1
@heymatthew la razón por la que se está votando negativamente es porque no respondió la pregunta formulada. Respondió a una pregunta no relacionada completamente diferente.
Tabitha
17

¿Has intentado editar la entrada del shell en la configuración de la cuenta ?

Vaya a Preferencias de cuentas, desbloquee y haga clic derecho en su cuenta de usuario para el cuadro de diálogo Configuración avanzada . Su shell debería ser / bin / zsh, y puede editar esa invocación adecuadamente (es decir, agregar el argumento --login).

Brian Agnew
fuente
Desafortunadamente, eso no funciona: puedo configurar cualquier shell que me guste usando chsh (siempre que tenga este shell en / etc / shells), sin embargo, uno no puede agregar argumentos de línea de comando al shell en el diálogo de preferencias Avanzado (falla iTerm para iniciar el shell).
Ivan Tarasov
Algunos de la sintaxis ha cambiado en OS X, pero lo esencial es establecer su shell predeterminado a / bin / zsh como Brian indica más arriba
engineerDave
77
Me gusta tanto. ¡Utilicé esta respuesta justo ahora, y solo entonces me di cuenta de que la escribí hace casi 4 años!
Brian Agnew
-2

Use la loginutilidad para crear un shell de inicio de sesión. Suponga que el usuario en el que desea iniciar sesión tiene el nombre de usuario Alice y que zsh está instalado /opt/local/bin/zsh(por ejemplo, una versión más reciente instalada a través de MacPorts). En iTerm 2, vaya a Preferencias, Perfiles, seleccione el perfil que desea configurar e ingrese en Comando :

login -pfq Alice /opt/local/bin/zsh

Consulte man loginpara obtener más detalles sobre las opciones.

Robin Klose
fuente
Esto es 100% no es una respuesta. Sí cambiará el shell que genera por defecto, pero esa no es una respuesta sobre cómo crear una instancia de "inicio de sesión" de un shell, es decir, utilizar todas las variables desde cero.
Tabitha