iTerm2 ejecuta mi .zshrc dos veces


2

Al iniciar un terminal en iTerm 2, mi .zshrc se ejecuta dos veces. ¿Es posible que tenga algo que ver con el "último inicio de sesión" impreso por iTerm en la parte superior del terminal? Alguien sabe como arreglar esto?

Ejemplo de salida, nueva terminal:

last login: Wed Mar  4 12:55:35 on ttys000

The mark of a good party is that you wake up the next morning wanting to
change your name and start a new life in different city.
        -- Vance Bourjaily, "Esquire"

You never know what is enough until you know what is more than enough.
        -- William Blake

~ ❯❯❯ zsh

Oh, love is real enough, you will find it some day, but it has one
arch-enemy -- and that is life.
        -- Jean Anouilh, "Ardele"

~ ❯❯❯

Como puede ver, cuando se abre iTerm fortune (en mi .zshrc) se ejecuta dos veces, pero cuando se inicia un nuevo shell con el terminal ya abierto, se ejecuta correctamente una vez. ¿Alguna forma de arreglar este comportamiento?


¿Qué has configurado en tu perfil de iterm para iniciar zsh?
Mark

Yo no. zsh genera automáticamente ese archivo cuando se inicia
nw.

¿Por qué iTerm inicia zsh? El valor predeterminado es bash, es decir, ¿qué has cambiado?
Mark

1
Ejecuta el shell predeterminado del usuario en / etc / passwd
nw.

No he cambiado ninguna de las preferencias de iterm
nw.

Respuestas:


2

Gran parte de esto depende de la configuración que haya realizado en ITerm y de la configuración de shells.

Por defecto, iTerm ejecuta el shell en / etc / passwd como un shell de inicio de sesión. Por defecto, el shell es bash pero el usuario lo cambió a zsh

zsh tiene varios archivos que se utilizan en el inicio ver manual de zsh $ ZDOTDIR es por defecto su directorio de inicio

Los comandos se leen primero desde / etc / zshenv; Esto no puede ser anulado.   ...

Luego se leen los comandos desde $ ZDOTDIR / .zshenv. Si el shell es un shell de inicio de sesión, los comandos se leen desde / etc / zprofile y luego $ ZDOTDIR / .zprofile. Luego, si el shell es interactivo, los comandos se leen desde / etc / zshrc y luego $ ZDOTDIR / .zshrc. Finalmente, si el shell es un shell de inicio de sesión, se leen / etc / zlogin y $ ZDOTDIR / .zlogin.

Por lo tanto, cuando los elementos inician un shell de inicio de sesión (y suponen que no hay archivos globales en / tc), se obtienen los siguientes archivos

/etc/zshenv
~/.zshenv
~/.zprofile
~/.zshrc
~/.zlogin

Si zsh se inicia desde un indicador de shell, no es un shell de inicio de sesión y, por lo tanto, solo se lee lo siguiente

/etc/zshenv
~/.zshenv
~/.zshrc

Si tiene un comportamiento diferente en los dos casos, mire su ~ / .zprofile y ~ / .zlogin.

En este caso, uno de ellos probablemente sea sourcing ~ / .zshrc. Tenga en cuenta que esto difiere de bash donde un shell de inicio de sesión lee ~ / .bash_profile y un shell no de inicio de sesión lee ~ / .bash_profile y este es el uso normal de bash para obtener la fuente ~ / .bashrc en ~ /, bash_profile, así que para que no sea necesario duplicar código.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.