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:
$ bash ; bash ; bash
et puis frappé Ctrl-Dtrois fois, .bashrc
courra trois fois. Mais si vous dites ceci à la place:
$ bash -c exit ; bash -c exit ; bash -c exit
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 des PATH
ajustements .bash_profile
, car ces modifications ne sont généralement pas idempotentes :
export PATH="$PATH:/some/addition"
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 du PATH
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 survi
avec :sh
, par exemple.
.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 de https://github.com/junegunn/fzf
via cette commande à l' intérieur .bashrc
: source ~/.fzf.bash
. Je lance un nouveau terminal, puis Ctrl
+ 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) :
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 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.
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'informations
.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.