Quelle est la différence entre .bashrc, .bash_profile et .environment?
-
03-07-2019 - |
Question
J'ai utilisé un certain nombre de systèmes * à base de nix différents au cours des années et il semble que chaque saveur de Bash que j'utilise utilise un algorithme différent pour décider des scripts de démarrage à exécuter. Pour les tâches telles que la configuration des variables d’environnement et des alias et l’impression des messages de démarrage (par exemple, MOTD), quel script de démarrage est le lieu approprié pour les effectuer?
Quelle est la différence entre insérer des éléments dans .bashrc
, .bash_profile
et .environment
? J'ai également vu d'autres fichiers tels que .login
, .bash_login
et .profile
; Sont-ils toujours pertinents? Quelles sont les différences entre celles qui sont exécutées lors d'une connexion physique, d'une connexion à distance via ssh et de l'ouverture d'une nouvelle fenêtre de terminal? Existe-t-il des différences significatives entre les plates-formes (y compris Mac OS X (et son terminal.app) et Cygwin Bash)?
La solution
La principale différence avec les fichiers de configuration du shell réside dans le fait que certains ne sont lus que par "login". shells (par exemple, lorsque vous vous connectez à partir d'un autre hôte, ou que vous vous connectez à la console de texte d'une machine Unix locale). Ce sont ceux qui sont appelés, par exemple, .login
ou .profile
ou .zlogin
(selon le shell utilisé).
Ensuite, vous avez des fichiers de configuration lus par "interactive". des shells (comme dans ceux connectés à un terminal (ou pseudo-terminal dans le cas, par exemple, d'un émulateur de terminal fonctionnant sous un système de fenêtrage). Ce sont ceux portant des noms comme .bashrc
, < code> .tcshrc , .zshrc
, etc.
bash
complique cela en ce que .bashrc
est uniquement lu par un shell à la fois interactif et non-login , vous constaterez donc que la plupart des gens finissent par dire à leur .bash_profile
de lire également .bashrc
avec quelque chose comme
[[-r ~ / .bashrc]] & amp; & amp; . ~ / .bashrc
Les autres shells se comportent différemment - par exemple, avec zsh
, .zshrc
est toujours lu pour un shell interactif, que ce soit avec un login ou non.
La page de manuel de bash explique les circonstances dans lesquelles chaque fichier est lu. Oui, le comportement est généralement cohérent entre les machines.
.profile
est simplement le nom de fichier du script de connexion utilisé à l'origine par / bin / sh
. bash
, généralement compatible en amont avec / bin / sh
, lira .profile
s'il en existe un.
Autres conseils
C'est simple. C'est expliqué dans man bash
:
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
Les shells de connexion sont ceux qui sont lus par vous-même (ils ne sont donc pas exécutés lors du démarrage de xterm, par exemple). Il existe d'autres moyens de se connecter. Par exemple, en utilisant un gestionnaire d’affichage X. Ceux-ci ont d'autres moyens de lire et d'exporter des variables d'environnement au moment de la connexion.
Lisez également le chapitre INVOCATION
du manuel. Il indique "Les paragraphes suivants décrivent comment bash exécute ses fichiers de démarrage." , je pense que c'est un spot-on :) Il explique ce qu'est un "interactif". shell est aussi.
Bash ne connaît pas .environment
. Je soupçonne que c'est un fichier de votre distribution, pour définir des variables d'environnement indépendantes du shell que vous conduisez.
Classiquement, ~ / .profile
est utilisé par Bourne Shell et est probablement pris en charge par Bash en tant que mesure héritée. De nouveau, C Shell a utilisé ~ / .login
et ~ / .cshrc
- je ne suis pas sûr que Bash les utilise du tout.
Le ~ / .bash_profile
sera utilisé une fois, lors de la connexion. Le script ~ / .bashrc
est lu à chaque démarrage d'un shell. Ceci est analogue à /. Cshrc
pour le shell C.
Une conséquence est que les éléments de ~ / .bashrc
doivent être aussi légers (minimum) que possible afin de réduire les frais généraux lors du démarrage d'un shell sans connexion.
Je pense que le fichier ~ / .environment
est un fichier de compatibilité pour Korn Shell.
J'ai trouvé des informations sur .bashrc et .bash_profile ici . pour résumer:
.bash_profile est exécuté lorsque vous s'identifier. Des trucs que vous avez mis là pourraient être votre chemin et d'autres importants variables d'environnement.
.bashrc est utilisé pour les shells non connectés. Je ne suis pas sûr de ce que cela signifie. je connais ce RedHat l'exécute à chaque démarrage un autre shell (su à cet utilisateur ou simplement en appelant bash à nouveau) vouloir mettre des alias là-bas, mais encore une fois Je ne suis pas sûr de ce que cela signifie. je simplement ignorer moi-même.
.profile est l'équivalent de .bash_profile pour la racine. je pense le nom est changé pour laisser les autres les coquilles (csh, sh, tcsh) l'utilisent également. (vous n'en avez pas besoin en tant qu'utilisateur)
Il y a aussi .bash_logout qui exécute à, ouais bonne supposition ... déconnexion. Vous voudrez peut-être arrêter les démons ou même faire un peu de ménage. Vous pouvez ajouter également "effacer" là si tu veux effacez l’écran lorsque vous vous déconnectez.
Il existe également un suivi complet de chacun des fichiers de configuration ici
Celles-ci sont probablement même dépendantes de la distro., toutes les distributions ne choisissent pas d'avoir chaque configuration avec elles et certaines en ont encore plus. Mais lorsqu'ils portent le même nom, ils incluent généralement le même contenu.
Selon Josh Staiger , le terminal.app de Mac OS X est actuellement exécute un shell de connexion plutôt qu'un shell sans connexion par défaut pour chaque nouvelle fenêtre de terminal, en appelant .bash_profile au lieu de .bashrc.
Il recommande:
La plupart du temps, vous ne souhaitez pas conserver deux fichiers de configuration distincts. pour les shells de connexion et de non-connexion - lorsque vous définissez un PATH, vous voulez qu'il appliquer aux deux. Vous pouvez résoudre ce problème en recherchant .bashrc à partir de votre fichier .bash_profile, puis en mettant PATH et les paramètres communs dans .bashrc.
Pour ce faire, ajoutez les lignes suivantes à .bash_profile:
if [ -f ~/.bashrc ]; then source ~/.bashrc fi
Maintenant, lorsque vous vous connectez à votre La machine depuis une console .bashrc sera appelée.
Un bon endroit à regarder est la page de manuel de bash. Voici une version en ligne. Recherchez "INVOCATION". section.
J'ai utilisé des distributions de la famille Debian qui semblent exécuter .profile
, mais pas .bash_profile
,
alors que les dérivés RHEL exécutent .bash_profile
avant .profile
.
Cela semble être un gâchis lorsque vous devez configurer des variables d'environnement pour qu'elles fonctionnent dans tout système d'exploitation Linux.