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.
Réponses
Trop de publicités?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.
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 . CommeLESS
,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 avecset
etshopt
, 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
.
À 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.
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.