Enquête simple: je viens de réaliser que je n'ai jamais vu de shebang au dessus d'un .bashrc
script, ce qui m'amène à penser que le système utilise le shell par défaut pour le source lors de la connexion ( ${SHELL}
). Je réfléchis aux raisons pour lesquelles c'est le cas, c'est-à-dire que c'est une mauvaise habitude d'utiliser autre chose que le shell par défaut pour exécuter le script de connexion.
22
Réponses:
.bashrc
et ne.bash_profile
sont PAS des scripts. Ce sont des fichiers de configuration qui proviennent chaque fois qu'ilsbash
sont exécutés de deux manières:La section INVOCATION de la page de manuel bash est ce qui est pertinent.
Vous pouvez contrôler leur chargement via les commutateurs de ligne de commande,
--norc
et--noprofile
. Vous pouvez également remplacer l'emplacement d'où ils sont chargés à l'aide du--rcfile
commutateur.Comme d'autres l'ont mentionné, vous pouvez imiter la façon dont ces fichiers sont chargés via l'utilisation de la
source <file>
commande ou l'utilisation de la. <file>
commande.Il est préférable de penser à cette fonctionnalité comme suit:
Méthodes d'invocation
Ce sujet semble apparaître de temps en temps, voici donc un petit cheatsheet des différentes façons d'invoquer
bash
et de leur résultat. REMARQUE: pour vous aider, j'ai ajouté les messages "sourced $ HOME / .bashrc" et "sourced $ HOME / .bash_profile "dans leurs fichiers respectifs.appels de base
bash -i
bash -l
bash -il -ou- bash -li
bash -c "..cmd .."
REMARQUE: notez que le
-c
commutateur n'a source aucun des deux fichiers!désactivation de la lecture des fichiers de configuration
bash --norc
bash --noprofile
bash --norc -i
bash --norc -l
bash --noprofile -i
bash --noprofile -l
bash --norc -i -ou- bash --norc -l
Des moyens plus ésotériques d'appeler bash
bash --rcfile $ HOME / .bashrc
bash --norc --rcfile $ HOME / .bashrc
Ces échecs
bash -i -rcfile ~ / .bashrc
bash -i -rcfile .bashrc
Il y en a probablement plus, mais vous comprenez bien, j'espère ...
Quoi d'autre?
Enfin, si vous êtes tellement fasciné par ce sujet que vous souhaitez en lire / explorer davantage, je vous suggère fortement de jeter un œil au Guide du débutant Bash, en particulier la section: 1.2. Avantages du Bourne Again SHell . Les différentes sous-sections sous celle-ci, "1.2.2.1. Invocation" à "1.2.2.3.3. Comportement interactif du shell" expliquent les différences de bas niveau entre les différentes manières que vous pouvez invoquer
bash
.la source
.bash_profile
inclut une ligne pour la source du fichier.bashrc
. Mais je pense que c'est très typique des configurations..bashrc
et ce.bash_profile
ne sont pas des scripts . À mon humble avis, ce sont des scripts spécifiques qui sont implicitement fournis lors de l'initialisation de bash ou explicitement lorsque vous devez appliquer leurs modifications. Ils ne configurent pas seulement l'environnement bash (variables, fonctions, alias ...) comme prévu à partir des fichiers de configuration. Ils peuvent effectuer n'importe quelle action comme dans les scripts courants. Par exemple, ils peuvent démarrer diverses actions comme des tâches d'arrière-plan, écrire des enregistrements de journal, initialiser certains programmes, etc. Merci de toute façon pour le résumé détaillé!.bashrc
les scripts ne sont exécutés que parbash
lui-même. Ils ne sont pas autonomes et ne sont pas destinés à êtreexec
proférés par le système. (En fait, ils ne sont généralement pas marqués comme exécutables et, comme vous le dites, ils n'ont pas de ligne de shebang.)Ces scripts sont censés être
source
d, car ils font généralement des choses comme changer les variables d'environnement ($PATH
, par exemple), qui devraient persister après la fin du script. Il serait donc vraiment inutile d'essayer d'en exécuter un dans un sous-shell.la source
En plus des autres réponses, notez que si vous le souhaitez, rien ne vous interdit de mettre un shebang au début de ces fichiers de configuration.
Cela ne nuirait pas à leur approvisionnement car le shebang sera traité comme un commentaire normal, c'est-à-dire ignoré.
Cela pourrait aider les éditeurs qui utilisent la coloration syntaxique à comprendre quel langage de programmation est utilisé dans le fichier.
Notez que certains éditeurs aiment
vim
fournir des moyens alternatifs comme les modelines pour ces derniers. c'est-à-dire que vous pouvez toujours mettre des lignes de mode à la fin du~/.bashrc
et~/.bash_profile
ainsi de suite:la source
.bash_profile
sur une recommandation de ShellCheck.Je lis ça n'importe où je ne sais pas exactement où mais c'est vrai
la source