Qu'est-ce qui devrait / ne devrait pas aller dans .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?


133

Je cherche des directives sur ce que l’on devrait et ne devrait pas inclure dans les divers fichiers de démarrage zsh.

Je comprends l’ordre d’approvisionnement de ces fichiers et les conditions dans lesquelles ils sont obtenus, mais j’ignore encore ce qui doit être fait dans chacun d’eux.


Réponses:


156

Voici une liste non exclusive de ce que chaque fichier a tendance à contenir:

  • Comme il .zshenvest toujours recherché, il contient souvent des variables exportées qui devraient être disponibles pour d'autres programmes. Par exemple, $PATH, $EDITORet $PAGERsont souvent mis en .zshenv. En outre, vous pouvez définir $ZDOTDIRen .zshenvspécifier un autre emplacement pour le reste de votre configuration de zsh.
  • .zshrcest pour la configuration interactive du shell. Vous définissez les options pour le shell interactif à l’aide des commandes setoptet unsetopt. Vous pouvez également charger des modules shell, définir vos options d’historique, modifier votre invite, configurer le zle et son achèvement, et cetera. Vous définissez également les variables qui ne sont utilisées que dans le shell interactif (par exemple $LS_COLORS).
  • .zloginprovient du début d'un shell de connexion. Ce fichier est souvent utilisé pour démarrer X en utilisant startx. Certains systèmes démarrent X au démarrage, ce fichier n’est donc pas toujours très utile.
  • .zprofileest fondamentalement la même que .zloginsi ce n'est qu'elle est obtenue directement avant, .zshrcplutôt que directement après. Selon la documentation zsh, " .zprofileest conçu comme une alternative à" .zlogin "pour les fans de ksh; les deux ne sont pas destinés à être utilisés ensemble, bien que cela puisse certainement être fait si désiré."
  • .zlogout est parfois utilisé pour effacer et réinitialiser le terminal.

Consultez les fichiers de configuration d'utilisateurs aléatoires de Github pour avoir une meilleure idée de ce que chaque fichier doit contenir.


3
Juste pour clarifier, .zlogin est une source après .zshrc (voir man zshallpour plus de détails).
Aaron

8
Soyez au courant lors de la mise $PATHen .zshenv, divers autres fichiers tous interviennent après ce fichier qui remplacera cette valeur. Voir zsh.org/mla/users/2003/msg00600.html .
Beau Barker

Où devrait $LANGet $LC_ALLaller?
Lenar Hoyt

24
Juste pour mes propres notes / confirmation et pour aider quiconque, l'ordre ultime est .zshenv→ [ .zprofilesi vous êtes connecté] → [ .zshrcsi interactif] → [ .zloginsi vous êtes connecté] → [ .zlogoutparfois].
Gabriel L.

24

Voici une liste de ce que chaque fichier ne devrait / devrait pas contenir, à mon avis:

.zshenv

[Lire à chaque fois]

Ce fichier est toujours recherché, il doit donc définir des variables d’environnement qui doivent être mises à jour fréquemment . PATH (ou son chemin de contrepartie associé ) est un bon exemple car vous ne voulez probablement pas redémarrer votre session entière pour la mettre à jour. En le définissant dans ce fichier, la réouverture d'un émulateur de terminal démarrera une nouvelle instance de Zsh avec la valeur PATH mise à jour.

Mais sachez que ce fichier est lu même lorsque Zsh est lancé pour exécuter une seule commande (avec l' option -c ), même avec un autre outil comme make. Vous devez faire très attention de ne pas modifier le comportement par défaut des commandes standard, car certains outils pourraient en être brisés (en définissant des alias, par exemple).

.zprofile

[Lu au login]

Personnellement, je traite ce fichier comme .zshenvs'il ne comportait que des commandes et des variables ne devant être définies qu'une seule fois ou n'ayant pas besoin d'être mises à jour fréquemment :

  • variables d'environnement pour configurer les outils (indicateurs de compilation, emplacement du dossier de données, etc.)
  • configuration qui exécute des commandes (comme SCONSFLAGS="--jobs=$(( $(nproc) - 1 ))"), car l’exécution peut prendre un certain temps.

Si vous modifiez ce fichier, vous pouvez appliquer les mises à jour de la configuration en exécutant un shell de connexion:

exec zsh --login

.zshrc

[Lire quand interactive]

Je mets ici tout ce qui est nécessaire uniquement pour une utilisation interactive :

  • rapide,
  • achèvement de la commande,
  • correction de commande,
  • suggestion de commande,
  • mise en évidence des commandes,
  • coloration de sortie,
  • des alias,
  • raccourcis clavier,
  • gestion de l'historique des commandes,
  • autres outils interactifs divers (auto_cd, manydots-magic) ...

.zlogin

[Lu au login]

Ce fichier est comme .zprofile, mais est lu après .zshrc. Vous pouvez considérer que le shell est entièrement configuré au moment de l’exécution de .zlogin.

Je l’utilise donc pour lancer des commandes externes qui ne modifient pas les comportements du shell (par exemple, un gestionnaire de connexion).

.zlogout

[Lire à la déconnexion] [Dans le shell de connexion]

Ici, vous pouvez effacer votre terminal ou toute autre ressource configurée lors de la connexion.

Comment je choisis où mettre un paramètre

  • si cela est nécessaire pour une commande exécutée de manière non interactive :.zshenv
  • si elle doit être mise à jour sur chaque nouveau shell :.zshenv
  • s'il exécute une commande qui peut prendre un certain temps :.zprofile
  • si elle est liée à une utilisation interactive :.zshrc
  • s'il s'agit d'une commande à exécuter lorsque le shell est complètement configuré :.zlogin
  • si elle libère une ressource acquise lors de la connexion:.zlogout

0

Ne passez pas d' ssh-agentappels .zshenv. La lesscommande n’affiche plus aucun fichier texte, probablement parce que ses options ont été personnalisées par Prezto ( export LESS='-F -g -i -M -R -S -w -X -z-4'in .zprofile).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.