Question

J'ai utilisé un certain nombre de systèmes * à base de nix différents au cours des années et il semble que chaque saveur de Bash que j'utilise utilise un algorithme différent pour décider des scripts de démarrage à exécuter. Pour les tâches telles que la configuration des variables d’environnement et des alias et l’impression des messages de démarrage (par exemple, MOTD), quel script de démarrage est le lieu approprié pour les effectuer?

Quelle est la différence entre insérer des éléments dans .bashrc , .bash_profile et .environment ? J'ai également vu d'autres fichiers tels que .login , .bash_login et .profile ; Sont-ils toujours pertinents? Quelles sont les différences entre celles qui sont exécutées lors d'une connexion physique, d'une connexion à distance via ssh et de l'ouverture d'une nouvelle fenêtre de terminal? Existe-t-il des différences significatives entre les plates-formes (y compris Mac OS X (et son terminal.app) et Cygwin Bash)?

Était-ce utile?

La solution

La principale différence avec les fichiers de configuration du shell réside dans le fait que certains ne sont lus que par "login". shells (par exemple, lorsque vous vous connectez à partir d'un autre hôte, ou que vous vous connectez à la console de texte d'une machine Unix locale). Ce sont ceux qui sont appelés, par exemple, .login ou .profile ou .zlogin (selon le shell utilisé).

Ensuite, vous avez des fichiers de configuration lus par "interactive". des shells (comme dans ceux connectés à un terminal (ou pseudo-terminal dans le cas, par exemple, d'un émulateur de terminal fonctionnant sous un système de fenêtrage). Ce sont ceux portant des noms comme .bashrc , < code> .tcshrc , .zshrc , etc.

bash complique cela en ce que .bashrc est uniquement lu par un shell à la fois interactif et non-login , vous constaterez donc que la plupart des gens finissent par dire à leur .bash_profile de lire également .bashrc avec quelque chose comme

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

Les autres shells se comportent différemment - par exemple, avec zsh , .zshrc est toujours lu pour un shell interactif, que ce soit avec un login ou non.

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

.profile est simplement le nom de fichier du script de connexion utilisé à l'origine par / bin / sh . bash , généralement compatible en amont avec / bin / sh , lira .profile s'il en existe un.

Autres conseils

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

Les shells de connexion sont ceux qui sont lus par vous-même (ils ne sont donc pas exécutés lors du démarrage de xterm, par exemple). Il existe d'autres moyens de se connecter. Par exemple, en utilisant un gestionnaire d’affichage X. Ceux-ci ont d'autres moyens de lire et d'exporter des variables d'environnement au moment de la connexion.

Lisez également le chapitre INVOCATION du manuel. Il indique "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". shell est aussi.

Bash ne connaît pas .environment . Je soupçonne que c'est un fichier de votre distribution, pour définir des variables d'environnement indépendantes du shell que vous conduisez.

Classiquement, ~ / .profile est utilisé par Bourne Shell et est probablement pris en charge par Bash en tant que mesure héritée. De nouveau, C Shell a utilisé ~ / .login et ~ / .cshrc - je ne suis pas sûr que Bash les utilise du tout.

Le ~ / .bash_profile sera utilisé une fois, lors de la connexion. Le script ~ / .bashrc est lu à chaque démarrage d'un shell. Ceci est analogue à /. Cshrc pour le shell C.

Une conséquence est que les éléments de ~ / .bashrc doivent être aussi légers (minimum) que possible afin de réduire les frais généraux lors du démarrage d'un shell sans connexion.

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

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

  

.bash_profile est exécuté lorsque vous   s'identifier. Des trucs que vous avez mis là pourraient être   votre chemin et d'autres importants   variables d'environnement.

     

.bashrc est utilisé pour les shells non connectés.   Je ne suis pas sûr de ce que cela signifie. je connais   ce RedHat   l'exécute à chaque démarrage   un autre shell (su à cet utilisateur ou   simplement en appelant bash à nouveau)   vouloir mettre des alias là-bas, mais encore une fois   Je ne suis pas sûr de ce que cela signifie. je   simplement ignorer moi-même.

     

.profile est l'équivalent de   .bash_profile pour la racine. je pense   le nom est changé pour laisser les autres   les coquilles (csh, sh, tcsh) l'utilisent également.   (vous n'en avez pas besoin en tant qu'utilisateur)

     

Il y a aussi .bash_logout qui   exécute à, ouais bonne supposition ... déconnexion.   Vous voudrez peut-être arrêter les démons ou même   faire un peu de ménage. Vous pouvez   ajouter également "effacer" là si tu veux   effacez l’écran lorsque vous vous déconnectez.

Il existe également un suivi complet de chacun des fichiers de configuration ici

Celles-ci sont probablement même dépendantes de la distro., toutes les distributions ne choisissent pas d'avoir chaque configuration avec elles et certaines en ont encore plus. Mais lorsqu'ils portent le même nom, ils incluent généralement le même contenu.

Selon Josh Staiger , le terminal.app de Mac OS X est actuellement exécute un shell de connexion plutôt qu'un shell sans connexion par défaut pour chaque nouvelle fenêtre de terminal, en appelant .bash_profile au lieu de .bashrc.

Il recommande:

  

La plupart du temps, vous ne souhaitez pas conserver deux fichiers de configuration distincts.   pour les shells de connexion et de non-connexion - lorsque vous définissez un PATH, vous voulez qu'il   appliquer aux deux. Vous pouvez résoudre ce problème en recherchant .bashrc à partir de votre   fichier .bash_profile, puis en mettant PATH et les paramètres communs dans .bashrc.

     

Pour ce faire, ajoutez les lignes suivantes à .bash_profile:

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

Maintenant, lorsque vous vous connectez à votre   La machine depuis une console .bashrc sera appelée.

Un bon endroit à regarder est la page de manuel de bash. Voici une version en ligne. Recherchez "INVOCATION". section.

J'ai utilisé des distributions de la famille Debian qui semblent exécuter .profile , mais pas .bash_profile , alors que les dérivés RHEL exécutent .bash_profile avant .profile .

Cela semble être un gâchis lorsque vous devez configurer des variables d'environnement pour qu'elles fonctionnent dans tout système d'exploitation Linux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top