Quelles sont les différences fonctionnelles entre .profile .bash_profile et .bashrc

182

Quelles sont les différences fonctionnelles entre le .profile, .bash_profileet les .bashrcfichiers?

lollercoaster
la source

Réponses:

151

.bash_profileet .bashrcsont spécifiques à bash, alors que .profilede nombreux shells le lisent en l’absence de leurs propres fichiers de configuration spécifiques au shell. (a .profileété utilisé par le shell Bourne original.) .bash_profileou .profileest lu par les shell de connexion, avec .bashrc; sous-shell en lecture seule .bashrc. (Entre le contrôle des tâches et les systèmes de fenêtrage modernes, on .bashrcne s'utilise pas beaucoup en soi. Si vous utilisez screenou tmux, les écrans / fenêtres exécutent généralement des sous-coques au lieu des coques de connexion.)

L'idée sous-jacente était que la configuration unique était effectuée par .profile(ou une version spécifique à un shell) et les éléments par shell par .bashrc. Par exemple, vous ne voulez généralement charger les variables d'environnement qu'une fois par session au lieu de les supprimer chaque fois que vous lancez un sous-shell dans une session, alors que vous voulez toujours vos alias (qui ne sont pas propagés automatiquement comme les variables d'environnement).

Autres fichiers de configuration de shell notables:

/etc/bash_profile(fallback /etc/profile) est lu avant l'utilisateur .profilepour la configuration à l'échelle du système, ainsi que /etc/bashrcdans les sous-shell (pas de repli pour celui-ci). De nombreux systèmes, y compris Ubuntu, utilisent également un /etc/profile.drépertoire contenant des scriptlets shell, qui sont .( source) -ed /etc/profile; les fragments ici sont par shell, avec *.shapplication à tous les shells compatibles Bourne / POSIX et autres extensions s'appliquant à ce shell particulier.

geekosaur
la source
58

.profil

.profileest destiné à des éléments qui ne sont pas spécifiquement liés Bash, comme les variables d'environnement PATHet les amis, et devrait être disponible à tout moment.

Par exemple, .profiledevrait également être chargé lors du démarrage d’une session de bureau graphique.


.bashrc

.bashrcest destiné à la configuration de l'utilisation interactive de Bash, comme Bash aliasesdéfinir votre favori editor, définir le Bash prompt, etc.


.bash_profile

.bash_profile est destiné à vérifier que les éléments contenus dans .profileet .bashrcsont chargés login shells.

Par exemple, .bash_profilepourrait être quelque chose de simple comme

. ~/.profile
. ~/.bashrc

Si vous deviez omettre .bashrc, seuls .profileseraient chargés.

MangeshBiradar
la source
1
Cela a répondu à ma question pour Mac OS X
Jake Toronto
38

Selon la page de manuel bash, .bash_profileest exécuté pour les shells de connexion, alors que pour les shells .bashrcinteractifs autres que de connexion.

Alors, qu'est-ce qu'un shell avec ou sans login?

Lorsque vous vous connectez (tapez le nom d'utilisateur et le mot de passe) via la console, assis devant la machine ou à distance via ssh: .bash_profileest exécuté pour configurer votre shell avant l'invite de commande initiale. Toutefois, si vous êtes déjà connecté à votre ordinateur et ouvrez une nouvelle fenêtre de terminal (xterm) dans Gnome ou KDE, il .bashrcest exécuté avant l'invite de commande de la fenêtre. .bashrcest également exécuté lorsque vous démarrez une nouvelle instance bash en tapant /bin/bashun terminal.

Terminal.app de Mac OS X constitue une exception aux instructions de la fenêtre de terminal. Il exécute un shell de connexion par défaut pour chaque nouvelle fenêtre de terminal, en appelant à la .bash_profileplace de .bashrc. D'autres émulateurs de terminaux d'interface graphique peuvent faire de même, mais la plupart ont tendance à ne pas le faire.

Plus ici .

Paulecci
la source