Quand un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes depuis ~/.bashrc, si ce fichier existe. Cela peut être inhibé en utilisant l' --norcoption. L' --rcfileoption de fichier forcera bash à lire et à exécuter des commandes à partir du fichier au lieu de ~/.bashrc.
Lorsque bash est démarré de manière non interactive, pour exécuter un script shell, par exemple, il recherche la variable BASH_ENVdans l'environnement, étend sa valeur s'il y apparaît et utilise la valeur développée comme nom d'un fichier à lire et à exécuter. Bash se comporte comme si la commande suivante avait été exécutée:
if[-n "$BASH_ENV"];then."$BASH_ENV";fi
mais la valeur de la PATHvariable n'est pas utilisée pour rechercher le nom du fichier.
Le fichier n'est que des commandes shell. Il est généralement utilisé pour modifier les invites, définir les variables d'environnement et définir les procédures shell. Traditionnellement, le fichier .profileest utilisé à cette fin, mais il basha tellement d’extensions qu’il a besoin de son propre fichier de démarrage pour les utilisateurs qui souhaitent placer des bashismes dans des fichiers de démarrage.
" Pas un shell de connexion " signifie des choses comme les lancements de script et généralement les fenêtres de terminaux lancées par les gestionnaires de fenêtres. Parfois, je configure des systèmes * nix pour qu'ils aient .bashrcet BASH_ENVjuste une source .profile. Tant que vous ne vous écartez pas des commandes shell POSIX, vous obtiendrez la même initialisation dans n'importe quel shell.
C'est particulièrement utile quand shc'est vraiment bash, ce qui arrive parfois. Pour ce faire, utilisez:
..profile
C’est l’une des raisons pour lesquelles tout cela est si complexe, c’est que parfois, les utilisateurs insèrent des éléments générant des sorties dans des fichiers de démarrage du shell ou définissent des invites de manière inconditionnelle. Cela pose beaucoup de problèmes lors de l'exécution de programmes shell et de commandes backtick dans des langues, sans parler system(3)des programmes C. bashJe pense que le mode de démarrage est conçu pour avoir un fichier où les paramètres de sortie et d’invite sont corrects et un fichier où il ne l’est pas. En règle générale, un test d'exécution est effectué pour distinguer l'interactivité, par exemple en vérifiant si l'invite est définie.
Bonne réponse. Juste une citation: le fichier n'est que des commandes shell. Il est généralement utilisé pour modifier les invites, définir les variables d'environnement et définir les procédures shell.
smwikipedia
2
Est-ce que quelqu'un sait ce que la partie rc de .bashrc / .zshrc signifie?
Peut-être que rc signifie configuration d'exécution.
Mike Diehn
12
Lorsque Bash démarre, il exécute les commandes dans divers scripts.
Lorsque Bash est appelé en tant que shell de connexion interactif, 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, puis lit et exécute les commandes à partir de la première qui existe et est lisible.
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'option --norc. L'option de fichier --rcfile forcera Bash à lire et à exécuter les commandes à partir du fichier au lieu de ~ / .bashrc.
@ pineapple: un alias est un moyen d'exécuter une commande, qui peut être longue, avec une commande plus courte. Par exemple, l'alias ll='ls -l'vous permet de taper llpour exécuter la ls -lcommande.
Réponses:
En fait, c’est
bash
précisément ce qui se lit.bashrc
(et/etc/bash.bashrc
). Il y a beaucoup de coquillages différents.La page de manuel bash (de Brian Fox et Chet Ramey; également la page d’information "Fichiers de démarrage Bash" ) est la référence faisant autorité:
Le fichier n'est que des commandes shell. Il est généralement utilisé pour modifier les invites, définir les variables d'environnement et définir les procédures shell. Traditionnellement, le fichier
.profile
est utilisé à cette fin, mais ilbash
a tellement d’extensions qu’il a besoin de son propre fichier de démarrage pour les utilisateurs qui souhaitent placer des bashismes dans des fichiers de démarrage." Pas un shell de connexion " signifie des choses comme les lancements de script et généralement les fenêtres de terminaux lancées par les gestionnaires de fenêtres. Parfois, je configure des systèmes * nix pour qu'ils aient
.bashrc
etBASH_ENV
juste une source.profile
. Tant que vous ne vous écartez pas des commandes shell POSIX, vous obtiendrez la même initialisation dans n'importe quel shell.C'est particulièrement utile quand
sh
c'est vraimentbash
, ce qui arrive parfois. Pour ce faire, utilisez:C’est l’une des raisons pour lesquelles tout cela est si complexe, c’est que parfois, les utilisateurs insèrent des éléments générant des sorties dans des fichiers de démarrage du shell ou définissent des invites de manière inconditionnelle. Cela pose beaucoup de problèmes lors de l'exécution de programmes shell et de commandes backtick dans des langues, sans parler
system(3)
des programmes C.bash
Je pense que le mode de démarrage est conçu pour avoir un fichier où les paramètres de sortie et d’invite sont corrects et un fichier où il ne l’est pas. En règle générale, un test d'exécution est effectué pour distinguer l'interactivité, par exemple en vérifiant si l'invite est définie.la source
http://en.wikipedia.org/wiki/Bash_(Unix_shell)
Voici quelques astuces et conseils:
http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
Essayons de définir l'invite pour qu'elle puisse afficher la date d'aujourd'hui et le nom d'hôte:
la source
.profile
après.bash_profile
? Une logique?Il devrait contenir diverses commandes "d'initialisation" pour votre shell, par exemple:
alias ll='ls -l'
).la source
ll='ls -l'
vous permet de taperll
pour exécuter lals -l
commande.