.bashrcest un script shell que Bash exécute à chaque démarrage interactif. Il initialise une session de shell interactive. Vous pouvez mettre n'importe quelle commande dans ce fichier que vous pourriez taper à l'invite de commande.
Vous mettez des commandes ici pour configurer le shell afin de l'utiliser dans votre environnement particulier ou pour personnaliser les éléments selon vos préférences. Une chose courante à mettre .bashrcsont les alias que vous voulez toujours être disponibles.
.bashrcfonctionne à chaque lancement de shell interactif. Si tu le dis:
$ bash ; bash ; bash
et puis frappé Ctrl-Dtrois fois, .bashrccourra trois fois. Mais si vous dites ceci à la place:
$ bash -c exit ; bash -c exit ; bash -c exit
alors .bashrcne fonctionnera pas du tout, car -crend l'appel Bash non interactif. La même chose est vraie lorsque vous exécutez un script shell à partir d'un fichier.
Contraste .bash_profileet .profilequi ne sont exécutés qu’au début d’un nouveau shell de connexion. ( bash -l) Vous choisissez si une commande va dans .bashrcvs en .bash_profilefonction de si vous souhaitez l'exécuter une fois ou pour chaque démarrage du shell interactif.
En tant que contre-exemple aux alias, que je préfère insérer .bashrc, vous souhaitez effectuer des PATHajustements .bash_profile, car ces modifications ne sont généralement pas idempotentes :
export PATH="$PATH:/some/addition"
Si vous définissez cela à la .bashrcplace, chaque fois que vous lancez un sous-shell interactif, :/some/additionil est ajouté jusqu'à la fin du PATHprocessus, ce qui crée un travail supplémentaire pour le shell lorsque vous tapez une commande avec erreur.
Vous obtenez un nouveau shell Bash interactif chaque fois que vous shell survi avec :sh, par exemple.
Petit problème: contrairement à la plupart des autres shells, bash ne charge pas automatiquement le fichier de configuration par instance .bashrclorsqu'il est lancé en tant que shell de connexion. Cela peut parfois conduire à un comportement inattendu . La solution habituelle consiste à rechercher à .bashrcpartir de .profileou à la .bash_profileplace.
Ilmari Karonen
@IlmariKaronen Etant donné qu'il .bashrcn'est pas destiné à être utilisé par d'autres coquilles, il est préférable de ne pas l'obtenir .profile(ce qui pourrait être utilisé par d'autres non- bashcoquilles).
Chepner
@IlmariKaronen que se passe-t-il (lisez: comment puis-je déboguer pourquoi) quand source ~/.bashrcou . ~/.bashrcou [[ -f ~/.bashrc ]] && source. ~/.bashrcou [ -f ~/.bashrc ] && source ~/.bashrcne fonctionne pas?
Nikos Alexandris
@ NikosAlexandris: C'est une question distincte. S'il vous plaît demander séparément .
Warren Young
@WarrenYoung je voudrais mais je me suis rendu compte que cela .bashrcprovient effectivement (en utilisant la commande recommandée de superuser.com/a/183980/128768 ) Le problème est en fait je fais face à la non sourçage de https://github.com/junegunn/fzfvia cette commande à l' intérieur .bashrc: source ~/.fzf.bash. Je lance un nouveau terminal, puis Ctrl+ Ret je reçois `__fzf_history__`bash: fzf: command not found. Je source manuellement .bashrcet le même raccourci clavier lance fzf comme prévu. Toutes mes excuses pour le bruit ici.
Nikos Alexandris
20
Le but d'un .bashrcfichier est de fournir un emplacement où vous pouvez configurer des variables, des fonctions et des alias, définir votre invite (PS1) et définir les autres paramètres que vous souhaitez utiliser à chaque démarrage de l'ouverture d'une nouvelle fenêtre de terminal.
Il fonctionne en s'exécutant chaque fois que vous ouvrez un nouveau terminal, une nouvelle fenêtre ou un nouveau volet.
HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al >/dev/null 2>&1&& alias ls='ls -F --color=al'|| alias ls='ls -G'
md (){[ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch (){ git branch 2>/dev/null | sed -e '/^[^*]/d'-e 's/* \(.*\)/\1/';}
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'set-o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases &&. $_
test -f ~/.git-completion.bash &&. $_
test -s ~/.autojump/etc/profile.d/autojump &&. $_[ ${BASH_VERSINFO[0]}-ge 4]&& shopt -s autocd[-f /etc/bash_completion ]&&! shopt -oq posix &&./etc/bash_completion[-z $TMUX ]&& export TERM=xterm-256color&& exec tmux
export PATH="$PATH:$HOME/.rvm/bin"# Add RVM to PATH for scripting[[-s "$HOME/.rvm/scripts/rvm"]]&& source "$home/.rvm/scripts/rvm"
Explication:
-1. Configurez mon fichier d’historique pour qu’il ignore les doublons et soit beaucoup plus volumineux que celui par défaut.
-2. Option de couleur lsselon si vous utilisez Linux ou OSX
-3. Fonction " md" pour créer un répertoire avec une commande
-4. Recherchez la branche git actuelle si vous vous trouvez dans un dépôt Git et ...
-5. -9. Définissez une invite PS1 géniale, comme dans
-10. Amélioration de l'invite PS2
-11. Définissez vi comme éditeur sur la ligne de commande
-12. Définissez vi comme éditeur par défaut
-13. Exécuter mon .bash_aliasesfichier s'il existe
-14. Exécutez mon script d’achèvement des onglets git (pour les télécommandes et les branches) s’il existe.
-15. Exécuter un saut automatique s'il existe
-16. Autoriser le cd'ing sans taper la partie cd si la version bash> = 4
-17. Exécutez un script d'achèvement de bash s'il existe
-18. Utilisez TMUX s'il est présent
-19. Ajoutez RVM à mon CHEMIN
-20. Utilisez rvm s'il existe.
J'ai créé ce portable pour qu'il fonctionne sur toutes mes machines Linux ou OSX sans personnalisation. Par conséquent, un certain nombre de tests de présence sont effectués avant d'utiliser certaines fonctions et d'autres scripts.
Cela facilite également l’utilisation immédiate du fichier entier dans son intégralité sur un nouvel ordinateur sans rencontrer de problèmes pouvant affecter l’ouverture d’une nouvelle fenêtre de terminal.
Cela n'ajoute pas vraiment de valeur ajoutée à une vieille question. En outre, je vois que vous êtes nouveau dans Unix et Linux, essayez de ne pas publier de photos de texte, il est préférable d’utiliser le format de bloc de code et de le copier à partir de votre console. Cela permet au texte d'être recherché / copié / etc. Dans le cas de votre exemple, il n’existe pas de commande compliquée ni de recherche intéressante, mais une bonne pratique pour d’autres réponses.
Centimane
1
Je ne suis pas sûr de bien comprendre votre référence à la «vieille question». Elle figure dans la liste des questions en haut et elle est pertinente pour 60 000 vues. Je pensais que la valeur ajoutée venait du format, par opposition à un dialogue / conjecture comme les réponses précédentes. mais le format a également été modifié. Je garderai à l'esprit vos commentaires sur l'utilisation de blocs de code, merci.
Timothy LJ Stewart
2
C'est en haut de la liste des questions 'actives' parce que vous avez posté une réponse. La question avait été posée à l'origine en 2014 et avait accepté une réponse. La réponse acceptée énonce l’objet .bashrcet distingue la différence entre .bashrcet .bash_profilequi couvre le contenu de votre réponse. Ne vous découragez pas, vous faites un effort honnête, mais essayez de vous concentrer sur les réponses aux questions avec un contenu non couvert par d'autres réponses.
Réponses:
.bashrc
est un script shell que Bash exécute à chaque démarrage interactif. Il initialise une session de shell interactive. Vous pouvez mettre n'importe quelle commande dans ce fichier que vous pourriez taper à l'invite de commande.Vous mettez des commandes ici pour configurer le shell afin de l'utiliser dans votre environnement particulier ou pour personnaliser les éléments selon vos préférences. Une chose courante à mettre
.bashrc
sont les alias que vous voulez toujours être disponibles..bashrc
fonctionne à chaque lancement de shell interactif. Si tu le dis:et puis frappé Ctrl-Dtrois fois,
.bashrc
courra trois fois. Mais si vous dites ceci à la place:alors
.bashrc
ne fonctionnera pas du tout, car-c
rend l'appel Bash non interactif. La même chose est vraie lorsque vous exécutez un script shell à partir d'un fichier.Contraste
.bash_profile
et.profile
qui ne sont exécutés qu’au début d’un nouveau shell de connexion. (bash -l
) Vous choisissez si une commande va dans.bashrc
vs en.bash_profile
fonction de si vous souhaitez l'exécuter une fois ou pour chaque démarrage du shell interactif.En tant que contre-exemple aux alias, que je préfère insérer
.bashrc
, vous souhaitez effectuer desPATH
ajustements.bash_profile
, car ces modifications ne sont généralement pas idempotentes :Si vous définissez cela à la
.bashrc
place, chaque fois que vous lancez un sous-shell interactif,:/some/addition
il est ajouté jusqu'à la fin duPATH
processus, ce qui crée un travail supplémentaire pour le shell lorsque vous tapez une commande avec erreur.Vous obtenez un nouveau shell Bash interactif chaque fois que vous shell sur
vi
avec:sh
, par exemple.la source
.bashrc
lorsqu'il est lancé en tant que shell de connexion. Cela peut parfois conduire à un comportement inattendu . La solution habituelle consiste à rechercher à.bashrc
partir de.profile
ou à la.bash_profile
place..bashrc
n'est pas destiné à être utilisé par d'autres coquilles, il est préférable de ne pas l'obtenir.profile
(ce qui pourrait être utilisé par d'autres non-bash
coquilles).source ~/.bashrc
ou. ~/.bashrc
ou[[ -f ~/.bashrc ]] && source. ~/.bashrc
ou[ -f ~/.bashrc ] && source ~/.bashrc
ne fonctionne pas?.bashrc
provient effectivement (en utilisant la commande recommandée de superuser.com/a/183980/128768 ) Le problème est en fait je fais face à la non sourçage dehttps://github.com/junegunn/fzf
via cette commande à l' intérieur.bashrc
:source ~/.fzf.bash
. Je lance un nouveau terminal, puisCtrl
+R
et je reçois`__fzf_history__`bash: fzf: command not found
. Je source manuellement.bashrc
et le même raccourci clavier lance fzf comme prévu. Toutes mes excuses pour le bruit ici.Le but d'un
.bashrc
fichier est de fournir un emplacement où vous pouvez configurer des variables, des fonctions et des alias, définir votre invite (PS1) et définir les autres paramètres que vous souhaitez utiliser à chaque démarrage de l'ouverture d'une nouvelle fenêtre de terminal.Il fonctionne en s'exécutant chaque fois que vous ouvrez un nouveau terminal, une nouvelle fenêtre ou un nouveau volet.
Vous pouvez voir le mien ici (image avec mise en évidence de la syntaxe) :
Explication:
-1. Configurez mon fichier d’historique pour qu’il ignore les doublons et soit beaucoup plus volumineux que celui par défaut.
-2. Option de couleur
ls
selon si vous utilisez Linux ou OSX-3. Fonction "
md
" pour créer un répertoire avec une commande-4. Recherchez la branche git actuelle si vous vous trouvez dans un dépôt Git et ...
-5. -9. Définissez une invite PS1 géniale, comme dans
-10. Amélioration de l'invite PS2
-11. Définissez vi comme éditeur sur la ligne de commande
-12. Définissez vi comme éditeur par défaut
-13. Exécuter mon
.bash_aliases
fichier s'il existe-14. Exécutez mon script d’achèvement des onglets git (pour les télécommandes et les branches) s’il existe.
-15. Exécuter un saut automatique s'il existe
-16. Autoriser le cd'ing sans taper la partie cd si la version bash> = 4
-17. Exécutez un script d'achèvement de bash s'il existe
-18. Utilisez TMUX s'il est présent
-19. Ajoutez RVM à mon CHEMIN
-20. Utilisez rvm s'il existe.
J'ai créé ce portable pour qu'il fonctionne sur toutes mes machines Linux ou OSX sans personnalisation. Par conséquent, un certain nombre de tests de présence sont effectués avant d'utiliser certaines fonctions et d'autres scripts.
Cela facilite également l’utilisation immédiate du fichier entier dans son intégralité sur un nouvel ordinateur sans rencontrer de problèmes pouvant affecter l’ouverture d’une nouvelle fenêtre de terminal.
la source
C'est un
bash
fichier de configuration.Shells interactifs (non-login), la configuration est lue à partir de ces fichiers:
$HOME/.bashrc
Pour les shell de connexion, la configuration est lue à partir de ces fichiers:
/etc/profile
(Toujours à l'origine)$HOME/.bash_profile
(le reste de ces fichiers est vérifié dans l'ordre jusqu'à ce qu'on en trouve un, aucun autre n'est lu)$HOME/.bash_login
$HOME/.profile
Une illustration simple de comment / quand ils sont chargés est dans l'image ci-dessous.
J'ai ajouté un
echo
à mon.bashrc
et.bash_profile
voir
man bash
pour plus d'informationsla source
.bashrc
et distingue la différence entre.bashrc
et.bash_profile
qui couvre le contenu de votre réponse. Ne vous découragez pas, vous faites un effort honnête, mais essayez de vous concentrer sur les réponses aux questions avec un contenu non couvert par d'autres réponses.