Cosa dovrebbe / non dovrebbe andare in .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?


133

Sto cercando linee guida su ciò che si dovrebbe e non si dovrebbe includere nei vari file di avvio per zsh.

Comprendo l'ordine di approvvigionamento di questi file e le condizioni in base alle quali provengono, ma non mi è ancora chiaro cosa dovrebbe andare in ciascuno di essi.


Risposte:


156

Ecco un elenco non esclusivo di ciò che ogni file tende a contenere:

  • Poiché .zshenvè sempre di provenienza, contiene spesso variabili esportate che dovrebbero essere disponibili per altri programmi. Ad esempio, $PATH, $EDITORe $PAGERsono spesso impostate in .zshenv. Inoltre, è possibile impostare $ZDOTDIRin .zshenvper specificare una posizione alternativa per il resto della configurazione zsh.
  • .zshrcè per la configurazione della shell interattiva. È possibile impostare le opzioni per la shell interattiva lì con i comandi setopte unsetopt. È inoltre possibile caricare i moduli shell, impostare le opzioni della cronologia, modificare il prompt, impostare zle e completamento, eccetera. È inoltre possibile impostare qualsiasi variabile utilizzata solo nella shell interattiva (ad es $LS_COLORS.).
  • .zloginviene fornito all'avvio di una shell di accesso. Questo file viene spesso utilizzato per avviare X utilizzando startx. Alcuni sistemi avviano X all'avvio, quindi questo file non è sempre molto utile.
  • .zprofileè fondamentalmente lo stesso, .zlogintranne per il fatto che proviene direttamente prima che .zshrcvenga fornito anziché direttamente dopo. Secondo la documentazione di zsh, " .zprofileè inteso come un'alternativa a` .zlogin 'per i fan di ksh; i due non sono pensati per essere usati insieme, anche se questo potrebbe certamente essere fatto se lo si desidera. "
  • .zlogout viene talvolta utilizzato per cancellare e ripristinare il terminale.

Dovresti passare attraverso i file di configurazione degli utenti casuali di Github per avere un'idea migliore di ciò che ogni file dovrebbe contenere.


3
Proprio come un punto di chiarezza, .zlogin viene fornito dopo .zshrc (vedere man zshallper i dettagli).
Aaron,

8
Essere consapevoli quando si imposta $PATHin .zshenv, vari altri file tutti provengono dopo questo file che verrà sovrascrivere questo valore. Vedi zsh.org/mla/users/2003/msg00600.html .
Beau Barker,

Dove dovrebbe $LANGe $LC_ALLandare?
Lenar Hoyt,

24
Solo per le mie note / conferme e per aiutare chiunque altro, l'ordine finale è .zshenv→ [ .zprofilese accesso] → [ .zshrcse interattivo] → [ .zloginse accesso] → [a .zlogoutvolte].
Gabriel L.,

24

Ecco un elenco di ciò che ogni file dovrebbe / non dovrebbe contenere, secondo me:

.zshenv

[Leggi ogni volta]

Questo file ha sempre origine, quindi dovrebbe impostare variabili di ambiente che devono essere aggiornate frequentemente . PATH (o il relativo percorso di controparte associato ) è un buon esempio perché probabilmente non si desidera riavviare l'intera sessione per aggiornarla. Impostandolo in quel file, la riapertura di un emulatore di terminale avvierà una nuova istanza Zsh con il valore PATH aggiornato.

Ma tieni presente che questo file viene letto anche quando Zsh viene avviato per eseguire un singolo comando (con l' opzione -c ), anche da un altro strumento come make. Dovresti stare molto attento a non modificare il comportamento predefinito dei comandi standard perché potrebbe rompere alcuni strumenti (impostando ad esempio gli alias).

.zprofile

[Leggi al login]

Personalmente tratto quel file come .zshenvma per comandi e variabili che dovrebbero essere impostati una volta o che non devono essere aggiornati frequentemente :

  • variabili d'ambiente per configurare gli strumenti (flag per la compilazione, posizione della cartella dati, ecc.)
  • configurazione che esegue comandi (come SCONSFLAGS="--jobs=$(( $(nproc) - 1 ))") in quanto potrebbe richiedere del tempo per l'esecuzione.

Se si modifica questo file, è possibile applicare gli aggiornamenti di configurazione eseguendo una shell di accesso:

exec zsh --login

.zshrc

[Leggi quando interattivo]

Ho messo qui tutto il necessario solo per l' uso interattivo :

  • richiesta,
  • completamento del comando,
  • correzione comandi,
  • suggerimento di comando,
  • evidenziazione del comando,
  • colorazione in uscita,
  • alias,
  • collegamenti chiave,
  • gestione della cronologia dei comandi,
  • altri strumenti interattivi vari (auto_cd, manydots-magic) ...

.zlogin

[Leggi al login]

Questo file è simile .zprofile, ma viene letto dopo .zshrc. Puoi considerare che la shell è completamente configurata al momento dell'esecuzione di .zlogin

Quindi, lo uso per avviare comandi esterni che non modificano i comportamenti della shell (ad esempio un gestore di login).

.zlogout

[Leggi al logout] [All'interno della shell di accesso]

Qui puoi cancellare il tuo terminale o qualsiasi altra risorsa che è stata configurata al login.

Come scelgo dove mettere un'impostazione

  • se è necessario per un comando eseguito in modo non interattivo :.zshenv
  • se deve essere aggiornato su ogni nuova shell :.zshenv
  • se esegue un comando che potrebbe richiedere del tempo per il completamento :.zprofile
  • se è correlato all'uso interattivo :.zshrc
  • se si tratta di un comando da eseguire quando la shell è completamente configurata :.zlogin
  • se rilascia una risorsa acquisita all'accesso:.zlogout

0

Non effettuare ssh-agentchiamate .zshenv. Ha causato il mio lesscomando di non visualizzare più alcun file di testo, probabilmente perché le sue opzioni sono state personalizzate da Prezto ( export LESS='-F -g -i -M -R -S -w -X -z-4'in .zprofile).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.