web-dev-qa-db-fra.com

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

Je suis à la recherche de lignes directrices sur ce que l'on devrait et ne devrait pas inclure dans les différents fichiers de démarrage pour zsh.

Je comprends l'ordre de provenance de ces fichiers et les conditions dans lesquelles ils sont obtenus, mais je ne sais toujours pas ce qui devrait se passer dans chacun d'eux.

177
kjo

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

  • Depuis .zshenv est toujours d'origine, il contient souvent des variables exportées qui devraient être disponibles pour d'autres programmes. Par exemple, $PATH, $EDITOR, et $PAGER sont souvent définis dans .zshenv. Vous pouvez également définir $ZDOTDIR dans .zshenv pour spécifier un autre emplacement pour le reste de votre configuration zsh.
  • .zshrc est pour la configuration interactive du Shell. Vous y définissez les options du shell interactif avec les commandes setopt et unsetopt. Vous pouvez également charger des modules Shell, définir vos options d'historique, modifier votre invite, configurer le zle et l'achèvement, etc. Vous définissez également toutes les variables qui ne sont utilisées que dans le shell interactif (par exemple $LS_COLORS).
  • .zlogin provient du démarrage 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.
  • .zprofile est fondamentalement identique à .zlogin sauf qu'il provient directement avant .zshrc provient plutôt que directement après. Selon la documentation de zsh, ".zprofile est 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 vous le souhaitez. "
  • .zlogout est parfois utilisé pour effacer et réinitialiser le terminal.

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

201
user26112

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

.zshenv

[Lire à chaque fois]

Ce fichier provient toujours, il doit donc définir des variables d'environnement qui doivent être mis à jour fréquemment. [~ # ~] chemin [~ # ~] (ou son homologue associé chemin ) est un bon exemple car vous ne voulez probablement pas redémarrer toute votre session pour la mettre à jour. En le définissant dans ce fichier, la réouverture d'un émulateur de terminal démarrera une nouvelle instance Zsh avec la valeur [~ # ~] du chemin [~ # ~] 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 par un autre outil comme make. Vous devez faites très attention à ne pas modifier le comportement par défaut des commandes standard car cela peut casser certains outils (en définissant des alias par exemple).

.zprofile

[Lire à la connexion]

Personnellement, je traite ce fichier comme .zshenv Mais pour les commandes et les variables qui doivent être définies une fois ou qui n'ont 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 son exécution peut prendre un certain temps.

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

exec zsh --login

.zshrc

[Lire lorsqu'il est interactif]

Je mets ici tout ce dont on a besoin uniquement pour tilisation interactive:

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

.zlogin

[Lire à la connexion]

Ce fichier ressemble à .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

Donc, je l'utilise pour lancer des commandes externes qui ne modifient pas les comportements de 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 qui a été configurée lors de la connexion.

Comment je choisis où mettre un paramètre

  • si elle est nécessaire par un commande exécutée de manière non interactive: .zshenv
  • s'il doit être mis à jour sur chaque nouveau Shell: .zshenv
  • s'il exécute une commande qui cela peut prendre un certain temps: .zprofile
  • si elle est liée à tilisation interactive: .zshrc
  • s'il s'agit d'un commande à exécuter lorsque le shell est entièrement configuré: .zlogin
  • s'il libère une ressource acquis lors de la connexion: .zlogout
40
Damien Flament

Ne mettez pas ssh-agent appelle .zshenv. Cela a fait que ma commande less 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' dans .zprofile).

0
egpbos