Voici le contenu du stock ~/.profile
fourni avec mon 13.10 (lignes commentées supprimées):
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
C'est hérité de Debian mais pourquoi Canonical a-t-il décidé de le garder? Pour autant que je sache, ce n'est pas la manière standard * nix et j'ai vu divers systèmes où cela ne s'est pas produit, donc je suppose qu'ils ont dû avoir une bonne raison. Cela peut provoquer un comportement inattendu lors de l'exécution de shells de connexion (comme lors de la saisie dans la machine par exemple) où l'utilisateur ne s'attendrait pas à avoir ~/.bashrc
sourcé.
Le seul avantage auquel je peux penser est de ne pas confondre l'utilisateur avec de nombreux fichiers de démarrage et de leur permettre de les éditer .bashrc
seuls et de les lire indépendamment du type de shell. Cependant, cela est un avantage douteux car il est souvent utile d'avoir des paramètres différents pour la connexion et pour les shells interactifs et cela vous empêche de le faire. De plus, les shells de connexion ne sont pas souvent exécutés dans un environnement graphique et cela peut provoquer des erreurs et des avertissements et des problèmes (oh mon Dieu!) En fonction de ce que vous avez défini dans ces fichiers.
Alors pourquoi Ubuntu fait-il cela, qu'est-ce qui me manque?
-n "$BASH_VERSION"
vrai en dehors de bash?.profile
source.bashrc
, ce n'est pas le cas dans toutes les versions de Linux et je me demande quelle est la raison derrière cela.Réponses:
Il s'agit d'une décision en amont venant de Debian. La raison de cela est expliquée dans ce très joli article wiki , dont voici un extrait. Le résumé analytique est "pour garantir que les connexions GUI et non GUI fonctionnent de la même manière":
la source
C'est le comportement standard d'Ubuntu,
~/.bashrc
c'est un fichier de démarrage au niveau de l'utilisateur par shell interactif. Lorsque vous ouvrez un terminal, vous démarrez un shell interactif sans connexion qui lit~/.bashrc
et lit le contenu~/.bashrc
obtenu et exporté dans votre environnement shell actuel. Il aide à obtenir toutes ses variables et fonctions de shell définies par l'utilisateur dans le shell actuel. Vous pouvez également trouver des lignes comme celle-cipour obtenir des alias définis par l'utilisateur dans l'environnement shell actuel.
Ceci est important pour offrir une bonne expérience utilisateur également. Par exemple , on pourrait stocker dans des titres de compétence proxy
.bashrc
, à moins qu'il ne se sourced aucune des applications de terminaux ( à savoir ,ping
,wget
,curl
,lynx
etc.) fonctionnera correctement. Ou vous devez fournir les informations d'identification du proxy à chaque fois que vous ouvrez un terminal.Outre la valeur par défaut d'Ubuntu, il
.bashrc
contient de nombreux alias conviviaux (pourls
etgrep
pour imprimer les sorties colorisées), de nombreuses nouvelles définitions pour différentes variables de shell, ce qui augmente l'expérience utilisateur.Mais dans le cas de votre connexion ssh ou de votre connexion dans la console virtuelle , vous obtenez essentiellement un shell de connexion interactif. Le fichier d'initiation du shell est là
~/.profile
. Par conséquent, à moins que~/.bashrc
vous ne recherchiez tous ces paramètres utiles dans votre.bashrc
. C'est pourquoi la~/.profile
source par défaut d'Ubuntu~/.bashrc
Cas à éviter
~/.profile
formulaire à l'intérieur~/.bashrc
en même temps que celui d'~/.bashrc
origine~/.profile
. Cela créera une boucle infinie de situation et par conséquent, votre invite de terminal sera suspendue à moins que vous n'appuyiez sur Ctrl+ C. Dans une telle situation, si vous mettez une ligne dans votre~/.bashrc
Ensuite, vous pouvez voir que le descripteur de fichier s'arrête lorsque vous ouvrez un terminal.
la source
.profile
sourcing.bashrc
? SuSe Enterprise 10 ne le fait pas, ni aucune des versions de Fedora que j'ai utilisées mais c'était il y a des années, je me trompe peut-être. CentOS 5.8 fait assez bizarrement. Quoi qu'il en soit, vous voyez mon point? C'est un choix de design et je me demande pourquoi il a été fait..bashrc
ou dans.bash_aliases
. Par exemple, j'ai un alias pourls
commels --color=auto
dans mon.bashrc
et mon.bashrc
obtenu à partir de mon.profile
. Ici, je peux utiliser l'alias même de ssh. Ou je pourrais utiliser un proxy dans une session ssh. Si je ne lit pas mon.bashrc
de.profile
je lâche ces caractéristiques. Je pense qu'il s'agit d'une meilleure expérience utilisateur..bashrc
corrige cela. Mais cela cause aussi des problèmes, je me souviens de la première fois que j'ai utilisé un système qui avait ce comportement, je n'arrêtais pas de recevoir ces messages étranges quandssh
j'y entrais parce que j'utilisaisxset b off
dans mon.bashrc
qui avait l'habitude de désactiver la cloche du terminal mais seulement dans un système X donc il donnait des messages d'erreur. Cela m'a pris beaucoup de temps pour comprendre ce qui se passait, car je ne pensais pas que cela.bashrc
serait lu lors de l'exécution d'un shell de connexion. Je me demande simplement s'il y a une déclaration "officielle" à ce sujet.