.bashrc
et ne .bash_profile
sont PAS des scripts. Ce sont des fichiers de configuration qui proviennent chaque fois qu'ils bash
sont exécutés de deux manières:
La section INVOCATION de la page de manuel bash est ce qui est pertinent.
Un shell de connexion est celui dont le premier caractère de l'argument zéro est un -
, ou un a commencé avec l' --login
option.
Un shell interactif est un shell démarré sans arguments sans option et sans l' -c
option dont l'entrée standard et l'erreur sont toutes deux connectées à des terminaux (comme déterminé par isatty(3))
, ou un démarré avec l' -i
option. PS1 est défini et $-
inclut i
if bash
est interactif, permettant un script shell ou un fichier de démarrage pour tester cet état.
Les paragraphes suivants décrivent comment bash
exécute ses fichiers de démarrage. Si l'un des fichiers existe mais ne peut pas être lu, bash signale une erreur. Les tildes sont développés dans les noms de fichiers comme décrit ci-dessous sous
Tilde Expansion dans la section EXPANSION .
Lorsque bash est invoqué en tant que shell de connexion interactif , ou en tant que shell non interactif avec l' --login
option, il lit et exécute d'abord les commandes du fichier /etc/profile
, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile
,
~/.bash_login
et ~/.profile
, dans cet ordre, et lit et exécute les commandes de la première qui existe et est lisible. L'
--noprofile
option peut être utilisée lorsque le shell est démarré pour inhiber ce comportement.
Lorsqu'un shell de connexion se ferme, bash lit et exécute les commandes du fichier ~/.bash_logout
, s'il existe.
Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes de ~/.bashrc
, si ce fichier existe. Cela peut être inhibé en utilisant l' --norc
option. L' --rcfile file
option forcera bash à lire et à exécuter des commandes à partir du fichier au lieu de ~/.bashrc
.
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:
- bash démarre avec un environnement nu
- bash ouvre alors l'un de ces fichiers (selon la façon dont il a été invoqué comme interactif ou de connexion, puis ...
- ... ligne par ligne exécute chacune des commandes du fichier ...
- une fois terminé, donne le contrôle sous la forme d'une invite, en attente de saisie
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 -i
sourced /home/saml/.bashrc
bash -l
$ bash -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -il -ou- bash -li
$ bash -il
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -c "..cmd .."
$ bash -c 'echo hi'
hi
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 --norc
bash-4.1$
bash --noprofile
$ bash --noprofile
sourced /home/saml/.bashrc
bash --norc -i
$ bash --norc -i
bash-4.1$
bash --norc -l
$ bash --norc -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash --noprofile -i
$ bash --noprofile -i
sourced /home/saml/.bashrc
bash --noprofile -l
$ bash --noprofile -l
bash-4.1$
bash --norc -i -ou- bash --norc -l
$ bash --norc -c 'echo hi'
hi
Des moyens plus ésotériques d'appeler bash
bash --rcfile $ HOME / .bashrc
$ bash -rcfile ~/.bashrc
sourced /home/saml/.bashrc
bash --norc --rcfile $ HOME / .bashrc
$ bash --norc -rcfile ~/.bashrc
bash-4.1$
Ces échecs
bash -i -rcfile ~ / .bashrc
$ bash -i -rcfile ~/.bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
bash -i -rcfile .bashrc
$ bash -i -rcfile .bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: .bashrc: command not found
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
.