137 votes

à propos de .bash_profile, .bashrc et où un alias devrait-il être écrit?

Double Possible:
Quelle est la différence entre les deux .bashrc, .bash_profile, et .de l'environnement?

il semble que, si j'utilise

alias ls='ls -F'

à l'intérieur de .bashrc sur Mac OS X, puis le nouveau shell n'auront pas d'alias. J'ai besoin de type bash de nouveau et que les alias seront en vigueur.

et si je me connecte à linux sur la société d'hébergement, l' .bashrc a une ligne de commentaire qui dit:

pour les non-shell de connexion

et

.bash_profile a un commentaire

pour le shell de connexion

alors, où doit alias être écrit? comment venir nous séparer de shell de login et de non-shell de connexion?

certains page web de dire l'utilisation .bash_aliases mais il ne fonctionne pas sur Mac OS X, il me semble.

178voto

Charlie Martin Points 62306

La raison pour laquelle vous séparer de la connexion et non le shell de connexion est parce que l' .bashrc est rechargé à chaque fois que vous démarrez une nouvelle copie de bash. Le profil est chargé uniquement lors de la connexion ou de l'utilisation de l'indicateur approprié de dire bash pour ast comme un shell de connexion.

Ce que je fais est

  • mettre mon CHEMIN vers le haut dans une .le fichier de profil (parce que j'utilise parfois d'autres coquillages)
  • Mettre mon bash les alias et les fonctions dans mon .bashrc
  • Ensuite, utilisez ceci:

.bash_profile:

#!/bin/bash
#
# CRM .bash_profile Time-stamp: "2008-12-07 19:42"
#
# echo "Loading ${HOME}/.bash_profile"
source ~/.profile # Get the paths
source ~/.bashrc  # get aliases
#
#- end

Oh, et la raison pour laquelle vous devez taper bash à nouveau pour obtenir le nouvel alias, c'est que bash des charges de votre .bashrc quand il commence, il ne recharge pas, sauf si vous lui dites. Vous pouvez recharger le .bashrc (et pas besoin d'un second shell) en tapant

source ~/.bashrc

qui charge le .bashrc comme si vous aviez tapé le félicite directement à bash.

135voto

lhunath Points 27045

Découvrez http://mywiki.wooledge.org/DotFiles pour une excellente ressource sur le sujet hormis man bash.

Résumé:

  • Vous ne connecter qu'une seule fois, et c'est à ce moment ~/.bash_profile ou ~/.profile est lu et exécuté. Depuis tout ce que vous exécutez à partir de votre shell de connexion hérite de la shell de connexion de l'environnement, vous devez mettre toutes vos variables d'environnement . Comme LESS, PATH, MANPATH, LC_*, ... Pour un exemple, voir: Mon .profile
  • Une fois que vous vous connectez, vous pouvez exécuter plusieurs coquilles. Imaginez la connexion, l'exécution de X, et X à partir d'un petit nombre de terminaux avec bash coquilles. Cela signifie que votre shell de connexion commencé à X, qui hérita de votre login shell, variables d'environnement, qui a débuté vos terminaux, qui a commencé votre non-connexion bash coquilles. Vos variables d'environnement ont été adoptées dans l'ensemble de la chaîne, de sorte que votre non-shells de login n'avez pas besoin de les charger plus. Non-shells de login ne s'exécutera ~/.bashrc, pas /.profile ou ~/.bash_profile, pour cette raison exacte, donc là de définir tout ce qui s'applique uniquement à bash. C'est des fonctions, des alias, bash uniquement des variables comme HISTSIZE (ce n'est pas une variable d'environnement, n'exportez pas!), options d'environnement avec set et shopt, etc. Pour un exemple, voir: Mon .bashrc
  • Maintenant, dans le cadre d'UNIX particularité, une connexion shell ne peut PAS exécuter ~/.bashrc mais seulement ~/.profile ou ~/.bash_profile, de sorte que vous devrait à la source que l'on manuellement à partir de ce dernier. Vous me verrez faire dans mon ~/.profile trop: source ~/.bashrc.

13voto

Adam Rosenfield Points 176408

À partir de la page de manuel de bash:

Lorsque bash est invoqué comme un interactive shell de connexion, ou comme un non-shell interactif avec l' --login option, il lit et exécute les commandes à partir du fichier /etc/profile, si ce fichier existe. Après la lecture de ce fichier, il recherche ~/.bash_profile, ~/.bash_login, et ~/.profile, dans cet ordre, et lit et exécute des commandes à partir de la première celui qui existe et est lisible. L' --noprofile option peut être utilisée lorsque le shell est lancé pour inhiber cette comportement.

Quand un shell de connexion des sorties, bash lit et exécute les commandes à partir de la fichier ~/.bash_logout, si elle existe.

Quand un shell interactif qui n'est pas un shell de connexion est commencé, bash lit et exécute les commandes à partir d' ~/.bashrc, si ce fichier existe. Cette peut être inhibée par l'aide de la --norc option. L' --rcfile le fichier option force bash de lire et d'exécuter des commandes à partir d'un fichier au lieu de ~/.bashrc.

Donc, si vous voulez obtenir le même comportement pour les shells de login et interactif non-shells de login, vous devez mettre toutes vos commandes dans les deux .bashrc ou .bash_profile, puis l'autre fichier source de la première.

4voto

Sionide21 Points 1301

bash_profile est chargé pour un "shell de connexion". Je ne suis pas sûr de ce que ce serait sur OS X, mais sous Linux, il s’agit de X11 ou d’un terminal virtuel.

bashrc est chargé chaque fois que vous exécutez bash. C’est là que vous devez placer les éléments que vous souhaitez charger lorsque vous ouvrez une nouvelle fenêtre Terminal.app.

Personnellement, j'ai tout mis dans bashrc pour ne pas avoir à redémarrer l'application pour que les modifications prennent effet.

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