iTerm2 esegue il mio .zshrc due volte

2

Quando si avvia un terminale in iTerm 2, my .zshrc viene eseguito due volte. Forse ha qualcosa a che fare con l'ultimo login stampato nella parte superiore del terminale da iTerm? Qualcuno sa come risolvere questo problema?

Esempio di output, nuovo terminale:

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"

~ ❯❯❯

Come puoi vedere, quando apri iTerm fortune (nel mio .zshrc) viene eseguito due volte, ma quando si avvia una nuova shell con il terminale già aperto viene eseguito correttamente una volta. Qualche modo per correggere questo comportamento?

    
posta nw. 04.03.2015 - 19:08
fonte

1 risposta

2

Gran parte di ciò dipende dalla configurazione eseguita in ITerm e dalla configurazione delle shell.

Di default iTerm esegue la shell in / etc / passwd come shell di login. Di default la shell è bash ma l'utente lo ha modificato in zsh

zsh ha diversi file usati all'avvio vedi manuale zsh $ ZDOTDIR è di default la tua directory home

Commands are first read from /etc/zshenv; this cannot be overridden. ... ...

Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

Quindi, quando gli oggetti iniziano una shell di login (e non assumono file globali in / tc) vengono acquistati i seguenti file

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

Se zsh viene avviato da un prompt della shell, non è una shell di login e quindi vengono letti solo i seguenti

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

Se ottieni un comportamento diverso nei due casi, guarda ~ / .zprofile e ~ / .zlogin.

In questo caso uno di questi probabilmente sta utilizzando ~ / .zshrc. Si noti che questo differisce da bash dove una shell di login legge ~ / .bash_profile e una shell di login non legge ~ / .bash_profile e questo il normale uso di bash è quello di trovare ~ / .bashrc in ~ /, bash_profile in modo da fermare la necessità di duplicare codice.

    
risposta data 04.03.2015 - 20:41
fonte

Leggi altre domande sui tag