130 votes

Quelle est la différence entre .bashrc, .bash_profile et .environment?

J'ai utilisé un certain nombre de différents *nix-les systèmes basés sur des années, et il semble que chaque saveur de Bash-je utiliser a un autre algorithme pour décider du démarrage de l'exécution des scripts. Pour les fins de tâches comme la mise en place des variables d'environnement et d'alias et de l'impression des messages de démarrage (par exemple, MOTDs), le script de démarrage est le lieu approprié pour faire ces?

Quelle est la différence entre mettre les choses en .bashrc, .bash_profile, et .environment? J'ai aussi vu d'autres fichiers tels que .login, .bash_login, et .profile; sont-ce toujours d'actualité? Quelles sont les différences dans lesquels vous faire lorsque vous vous connectez physiquement, d'une connexion à distance via ssh, et l'ouverture d'une nouvelle fenêtre de terminal? Existe-il des différences significatives entre les plates-formes (y compris Mac OS X (et de son Terminal.app) et Bash Cygwin)?

73voto

Cos Points 947

La principale différence avec shell fichiers de config, c'est que certains ne sont lus par "login" coquilles " (eg. lorsque vous vous connectez à partir d'un hôte, ou de la connexion à la console de texte d'un local machine unix). ce sont les appelés, disons, .login ou .profile ou .zlogin (en fonction du shell que vous utilisez).

Ensuite, vous avez des fichiers de configuration qui sont lus par des "interactif" coquilles " (comme dans celles connecté à un terminal (ou un pseudo-terminal dans le cas de, disons, un émulateur de terminal fonctionnant sous un système de fenêtrage). ce sont ceux avec des noms comme .bashrc, .tcshrc, .zshrc, etc.

bash complique ce qu' .bashrc est lue que par une coque à la fois interactif et non-connexion, de sorte que vous verrez que la plupart des gens finissent par dire à leurs .bash_profile également lire .bashrc avec quelque chose comme

[[ -r ~/.bashrc ]] && . ~/.bashrc

D'autres coquilles se comporter différemment - par exemple avec des zsh, .zshrc est toujours en lecture pour un shell interactif, si c'est un nom de connexion ou pas.

La page de manuel de bash explique les circonstances dans lesquelles chaque fichier est en lecture. Oui, le comportement est généralement cohérente entre les machines.

.profile est tout simplement le script de connexion nom de fichier à l'origine utilisée par /bin/sh. bash, étant généralement vers l'arrière-compatible avec /bin/sh, lira .profile si celle-ci existe.

48voto

C'est simple. C'est expliqué en 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

Shells de Login sont celles qui sont à lire d'une connexion (donc, elles ne sont pas exécutées lors de la borne de départ jusqu'xterm, par exemple). Il y a d'autres façons de se connecter. Par exemple à l'aide d'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 l' INVOCATION chapitre dans le manuel. Il dit "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" coquille est trop.

Bash ne sais pas à propos de .environment. Je pense que c'est un fichier de votre distribution, de définir des variables d'environnement indépendant de la coque que vous conduisez.

9voto

Jonathan Leffler Points 299946

Classiquement, ~/.profile est utilisé par Bourne Shell, et est probablement pris en charge par Bash comme un héritage de la mesure. Encore une fois, ~/.login et ~/.cshrc ont été utilisés par le Shell C - je ne suis pas sûr que Bash utilise à tous.

L' ~/.bash_profile serait utilisé qu'une fois, lors de la connexion. L' ~/.bashrc script est lu à chaque fois qu'un shell est lancé. Ceci est analogue à l' /.cshrc pour le C Shell.

Une conséquence est que des trucs en ~/.bashrc doit être aussi léger (minime) que possible pour réduire la charge lors du démarrage d'un non-shell de connexion.

Je crois que le ~/.environment le fichier est un de compatibilité de fichier pour Korn Shell.

7voto

Filip Ekberg Points 22189

J'ai trouvé des informations sur .bashrc et .bash_profile ici, pour résumer:

.bash_profile est exécutée lorsque vous connexion. Choses que vous mettez dans il pourrait y avoir votre CHEMIN et d'autres importants les variables d'environnement.

.bashrc est utilisé à des fins non shells de 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. J' 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 à d'autres coques (csh, sh, tcsh) l'utiliser ainsi. (vous n'avez pas besoin de l'un comme de l'utilisateur)

Il est également .bash_logout qui s'exécute à, ouais deviner...déconnexion. Vous voudrez peut-être arrêter deamons ou même faire un peu de ménage . Vous pouvez également ajouter "clair" - y si vous voulez effacer l'écran lorsque vous vous déconnectez.

Il y a aussi un suivi complet sur chacun des fichiers de configurations ici

Ce sont probablement de la même distribution.-personne à charge, pas toutes les distros choisir chaque configuraton avec eux et certains ont même plus. Mais quand ils ont le même nom, ils ont en général le même contenu.

4voto

Rose Perrone Points 14478

Selon Josh Staiger, Mac OS X du Terminal.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 la connexion et de la non-shells de login - lorsque vous définissez un CHEMIN, vous voulez qu'il s'appliquent à la fois. Vous pouvez résoudre ce problème en la matière .bashrc de votre .bash_profile fichier, puis mettre la CHEMIN d'accès et des paramètres communs .bashrc.

Pour ce faire, ajoutez les lignes suivantes .bash_profile:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi

Désormais, lorsque vous vous connectez à votre machine à partir d'une console .bashrc sera appelée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X