Je sais qu'il ya /etc/profile
et /etc/bashrc
fichiers pour définir des variables globales de l' environnement et peut - être que je suis juste malentendu leurs fins, mais ...
Existe-t-il un bash_profile
fichier global ?
J'utilise Mac OS X
Ce n'est pas appelé bash_profile
, mais l'endroit standard pour la configuration bash globale est /etc/bash.bashrc
. Il est habituel d'appeler cela depuis /etc/profile
si le shell est bash. Par exemple, dans mon /etc/profile
j'ai:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
En termes d'utilisation, /etc/profile
fournit une configuration à l'échelle du système pour tous les shells compatibles Bourne (sh, bash, ksh, etc.). Il n'y a normalement pas besoin d'équivalent /etc/bash_profile
, car l'intention du fichier de profil est de contrôler le comportement des shells de connexion. Normalement, tout ce que vous voulez y faire ne sera pas spécifique à bash. /etc/bash.bashrc
est spécifique à bash et sera exécuté pour les shells de connexion et non-login.
Pour compliquer encore les choses, il semble que OS X n'en ait même pas /etc/bash.bashrc
. Cela est probablement lié au fait que les terminaux sous OS X fonctionnent par défaut en tant que shells de connexion , de sorte que la distinction est perdue:
Une exception aux directives de la fenêtre de terminal est Terminal.app de Mac OS X, qui exécute un shell de connexion par défaut pour chaque nouvelle fenêtre de terminal, appelant .bash_profile au lieu de .bashrc. D'autres émulateurs de terminaux GUI peuvent faire de même, mais la plupart ont tendance à ne pas le faire.
Je n'exécute pas OS X, donc l'étendue de mes connaissances s'arrête là.
/etc/bash.bashrc
partir d'un shell non interactif./etc/profile
peut être lu par un shell non interactif. Voir Différence entre Shell de connexion et Shell sans connexion?/etc/profile
par défaut dans Ubuntu 12.04. Que suggéreriez-vous à la place si l'on voulait un/etc/profile
qui n'était exécuté que sous bash, et aucun autre shell compatible sh?/etc/profile
fichier pour mon système contient un commentaire au sommet qui se lit:# System-wide .profile for sh(1)
. Est-ce que cela signifieprofile
estsh
spécifique?sh
Exécute- t-il en quelque sorte avantbash
?sh
est un sous-ensemble debash
./etc/profile
est exécuté poursh
,bash
et tous les autres shells compatibles Bourne./etc/bashrc
sur le mac, pas/etc/bash.bashrc
. Il semble également fonctionner/bin/sh
également./etc/profile
est le mondialbash_profile
. Il n'y a pas de fichier spécifique à bash, bash lit simplement le fichier standard lu par tous les shell de style Bourne. C'est là que vous pouvez définir des variables d'environnement à l'échelle du système.Voir Existe - t-il un fichier équivalent ".bashrc" lu par tous les shells? pour un aperçu générique des fichiers de démarrage courants de bash.
la source
Configuration du shell interactif (Bash) à l'échelle mondiale
Cela ne se charge pas
/etc/profile
, donc rien dans n'est/etc/profile.d/
chargé (contrairement aux shells de connexion, voir la fin).Le fichier global pour cela est / etc / bashrc ou /etc/bash.bashrc (selon l'
-DSYS_BASHRC=
indicateur défini au moment de la compilation):Habituellement, il est conseillé de laisser ce fichier tel quel (autant que possible) pour éviter les conflits. La stratégie que j'utilise est similaire à celle que les shells de connexion (/ etc / profile) utilisent.
Ma stratégie consiste à ajouter un chargeur au fichier ci-dessus:
Maintenant, je peux facilement ajouter n personnalisations au fichier shell global interactif (bash) en plaçant de nouveaux fichiers .sh dans le répertoire /etc/bashrc.d.
Coloriser Grep à l'échelle mondiale
/etc/bashrc.d/grep.sh
Vous pouvez le faire avec ce one-liner:
Comparez profile.d vs bashrc.d
Si, après avoir lu ceci, vous n'êtes pas convaincu, faites-le pour vous convaincre:
Ouvrez un nouvel émulateur de terminal et recherchez un mot commun dans votre répertoire utilisateur comme "le" en utilisant grep
Rien ne doit être coloré. Faites la même chose dans une console virtuelle en faisant CTRLALTF1 (rappelez-vous que votre serveur X fonctionne probablement sur CTRLALTF7 afin que vous puissiez revenir en arrière. Si vous oubliez, redémarrez simplement votre gestionnaire de bureau, par exemple)
donnera des résultats colorés comme souhaité.
Rien ne doit être coloré. Faites la même chose dans une console virtuelle en faisant CTRLALTF1(rappelez-vous que votre serveur X fonctionne probablement CTRLALTF7pour que vous puissiez revenir en arrière. Si vous oubliez, redémarrez simplement votre gestionnaire de bureau, par exemple)
donnera des résultats colorés comme souhaité.
Un shell de connexion est ce que vous obtenez lorsque vous démarrez une machine ou changez de console virtuelle CTRLALTF1via FNthla console virtuelle.
Un shell de connexion se charge
/etc/profile
pendant le chargement des/etc/profile.d/*.sh
fichiers.la source