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 cómo arreglar esto?

Salida de ejemplo, 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 la fortuna de iTerm (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?

    
pregunta nw. 04.03.2015 - 19:08

1 respuesta

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 al inicio, vea zsh manual $ ZDOTDIR es por defecto su directorio de inicio

  

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

     

Los comandos se leen 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, es probable que uno de ellos 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 que no es de inicio de sesión lee ~ / .bash_profile y este es el uso normal de bash para obtener la fuente ~ / .bashrc en ~ /, bash_profile para que no sea necesario código.

    
respondido por el Mark 04.03.2015 - 20:41

Lea otras preguntas en las etiquetas