Quelle est la différence entre les deux.bashrc,.profil bash, et.de l'environnement?
j'ai utilisé un certain nombre de systèmes différents *nix-basés des années, et il semble que chaque saveur de Bash que j'utilise a un algorithme différent pour décider quels scripts de démarrage à exécuter. Pour les tâches telles que la mise en place de variables d'environnement et d'Alias et l'impression de messages de démarrage (par exemple MOTDs), quel script de démarrage est l'endroit approprié pour le faire?
Quelle est la différence entre mettre des choses dans .bashrc
, .bash_profile
, et .environment
? J'ai également vu d'autres fichiers tels que .login
, .bash_login
, et .profile
; sont-ils jamais pertinents? Quelles sont les différences entre ceux qui sont lancés lors de la connexion physique, de la connexion à distance via ssh et de l'ouverture d'une nouvelle fenêtre de terminal? Y a-t-il des différences significatives entre les plates-formes (y compris Mac OS X (et son Terminal)?app) et Cygwin Bash)?
7 réponses
la principale différence avec les fichiers de configuration de l'interpréteur de commandes est que certains fichiers ne sont lus que par les interpréteurs de commandes" login " (par ex. lorsque vous vous connectez à partir d'un autre hôte, ou à la console de texte d'une machine unix locale). ce sont ceux appelés, disons, .login
ou .profile
ou .zlogin
(selon le shell que vous utilisez).
alors vous avez des fichiers de configuration qui sont lus par des shells "interactifs" (comme ceux connectés à un terminal (ou un pseudo-terminal dans le cas, par exemple, d'un émulateur terminal fonctionnant sous un système de fenêtrage). ce sont ceux avec des noms comme .bashrc
, .tcshrc
, .zshrc
, etc.
bash
complique cela en ce que .bashrc
est seulement lu par un shell qui est à la fois interactive et non-login , donc vous trouverez la plupart des gens finissent par dire leur .bash_profile
pour lire aussi .bashrc
avec quelque chose comme
[[ -r ~/.bashrc ]] && . ~/.bashrc
autres shells se comportent différemment-par exemple avec zsh
, .zshrc
est toujours lu pour un shell interactif, que ce soit 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 constant d'une machine à l'autre.
.profile
est simplement le nom du fichier de script de connexion utilisé à l'origine par /bin/sh
. bash
, étant généralement rétro-compatible avec /bin/sh
, se lira .profile
si l'un existe.
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 lors de la connexion (ils ne sont donc pas exécutés lors du démarrage de xterm, par exemple). Il y a d'autres moyens de se connecter. Par exemple, utiliser un gestionnaire d'affichage X. Ceux qui ont d'autres façons de lire et d'exporter les variables d'environnement au moment de la connexion.
lire aussi le chapitre INVOCATION
du manuel. Il est dit " ce qui suit les paragraphes 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 shell" interactif " 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 comme une mesure d'héritage. Encore une fois, ~/.login
et ~/.cshrc
ont été utilisés par C Shell - 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 fois qu'un shell est démarré. Ceci est analogue à /.cshrc
pour la couche C.
une conséquence est que les choses dans ~/.bashrc
devrait être aussi léger (minimal) que possible pour réduire les frais généraux lors du démarrage d'un shell non-login.
je crois 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 connexion. Ce que vous mettez là pourrait être votre chemin et d'autres importants les variables d'environnement.
.bashrc est utilisé pour les shells non login. Je ne suis pas sûr de ce que cela signifie. Je sais que RedHat il exécute chaque fois que vous démarrez un autre shell (su à cet utilisateur ou simplement en appelant bash nouveau) Vous pouvez voulez mettre des alias de là, mais de nouveau Je ne suis pas sûr de ce que cela signifie. Je simplement l'ignorer moi-même.
.le profil est l'équivalent de .bash_profile pour la racine. Je pense le nom est changé pour laisser l'autre coques (csh, sh, tcsh) l'utiliser ainsi. (vous n'en avez pas besoin en tant qu'utilisateur)
il y en a aussi .bash_logout qui exécute sur, oui bonne estimation...déconnexion. Vous pourriez vouloir arrêter deamons ou même faire un peu de ménage. Vous pouvez ajoutez également "clair" si vous voulez effacer l'écran lorsque vous vous déconnectez.
Il ya aussi un suivi complet sur chacun des fichiers de configuration ici
ceux-ci sont probablement même distro.- dépendant, pas tous les distros choisissent d'avoir chaque configuration avec eux et certains ont encore plus. Mais quand ils ont le même nom, ils incluent généralement le même contenu.
selon Josh Staiger , Terminal de Mac OS X.application exécute un shell de connexion plutôt qu'un non-shell de connexion par défaut pour chaque nouvelle fenêtre du terminal appelant .bash_profile au lieu de .bashrc.
il recommande:
la Plupart du temps vous ne voulez pas maintenir deux fichiers de configuration pour les shells login et non-login - lorsque vous définissez un chemin, vous voulez qu'il s'appliquent à la fois. Tu peux arranger ça en approvisionnement. bashrc de votre .bash_profile fichier, puis la mise chemin et les paramètres communs .bashrc.
pour ce faire, ajouter les lignes suivantes .bash_profile:
if [ -f ~/.bashrc ]; then source ~/.bashrc fi
Maintenant, lorsque vous vous connectez à votre machine à partir d'une console .bashrc sera appelée.
Un bon endroit pour regarder est la page de manuel de bash. ici est une version en ligne. Cherchez la section "INVOCATION".
j'ai utilisé Debian-family distros qui semble exécuter .profile
, mais pas .bash_profile
,
tandis que les dérivés du RHEL exécutent .bash_profile
avant .profile
.
il semble que ce soit un gâchis quand vous devez configurer des variables d'environnement pour fonctionner dans N'importe quel OS Linux.