web-dev-qa-db-fra.com

Quel est le but de .bashrc et comment ça marche?

J'ai trouvé le .bashrc fichier et je veux en connaître le but/la fonction. Aussi comment et quand est-il utilisé?

169
Pandya

.bashrc est un script Shell que Bash exécute chaque fois qu'il est démarré de manière interactive. Il initialise une session Shell interactive. Vous pouvez placer n'importe quelle commande dans ce fichier que vous pourriez taper à l'invite de commande.

Vous placez des commandes ici pour configurer le shell pour une utilisation dans votre environnement particulier, ou pour personnaliser les choses selon vos préférences. Une chose courante à mettre en .bashrc sont alias que vous souhaitez toujours être disponibles.

.bashrc s'exécute sur chaque lancement interactif de Shell. Si tu le dis:

$ bash ; bash ; bash

puis appuyez sur Ctrl-D trois fois, .bashrc s'exécutera trois fois. Mais si vous dites cela à la place:

$ bash -c exit ; bash -c exit ; bash -c exit

puis .bashrc ne fonctionnera pas du tout, puisque -c rend l'appel Bash non interactif. Il en va de même lorsque vous exécutez un script Shell à partir d'un fichier.

Contraste .bash_profile et .profile qui ne s'exécutent qu'au début d'un nouveau shell de connexion. (bash -l) Vous choisissez si une commande va dans .bashrc contre .bash_profile selon que vous souhaitez qu'il s'exécute une fois ou à chaque démarrage interactif du shell.

Comme contre-exemple aux alias, que je préfère mettre dans .bashrc, vous voulez faire PATH ajustements dans .bash_profile à la place, car ces modifications ne sont généralement pas idempotent :

export PATH="$PATH:/some/addition"

Si vous mettez cela dans .bashrc à la place, chaque fois que vous lancez un sous-shell interactif, :/some/addition serait à nouveau ajouté à la fin du PATH, créant un travail supplémentaire pour le shell lorsque vous taperez une commande.

Vous obtenez un nouveau shell Bash interactif chaque fois que vous Shell sur vi avec :sh, par exemple.

161
Warren Young

Le but d'un .bashrc fichier est de fournir un endroit où vous pouvez configurer des variables, des fonctions et des alias, définir votre invite (PS1) et définir d'autres paramètres que vous souhaitez utiliser chaque fois que vous ouvrez 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.

Un super minimal pourrait avoir les éléments suivants:

export CLICOLOR=1
export LANG="en_US.UTF-8"
alias cp="cp -i"
alias ls="ls --color=auto"
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
export EDITOR="vim"

C'est tout ce que vous savez vraiment pour commencer


Voici la version "overkill", utile pour les développeurs expérimentés:

Un développeur expérimenté en aura souvent beaucoup plus.
Vous pouvez voir le mien ici (photo 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. Configurer mon fichier d'historique pour ignorer les doublons et être beaucoup plus volumineux que la valeur par défaut.
- 2. Option de couleur pour ls selon que vous utilisez linux ou OSX
- 3. Fonction "md" pour créer et cd dans un répertoire avec une seule commande
- 4. Trouvez la branche git actuelle si dans un dépôt git et ...
- 5. -9. Définissez une invite PS1 impressionnante, comme dans <code>20:00:43 durrantm Castle2012 /hom/durrantm/Dropnot/_/Rails_apps/linker master \n $ _</code>
-dix. Invite PS2 améliorée
- 11. Définissez vi comme éditeur sur la ligne de commande
- 12. Définir vi comme éditeur par défaut
- 13. exécuter mon .bash_aliases fichier s'il existe
- 14. Exécutez mon script d'achèvement de l'onglet git (pour les télécommandes et les branches) s'il existe.
- 15. Exécuter le saut automatique s'il existe
- 16. Autoriser cd'ing sans taper la partie cd si la version bash> = 4
- 17. Exécuter un script d'achèvement bash s'il existe
- 18. Utilisez TMUX s'il est présent
- 19. Ajouter rvm à mon CHEMIN
- 20. Utilisez rvm s'il existe.

J'ai fait ce portable pour qu'il fonctionne sur n'importe laquelle de 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 de l'intégralité du fichier sur une nouvelle machine sans avoir de problèmes affectant l'ouverture d'une nouvelle fenêtre de terminal.

RAPPEL - si vous changez votre .bashrc, assurez-vous de démarrer une nouvelle fenêtre de terminal pour vous assurer qu'il fonctionne AVANT le redémarrage (meilleure pratique - faites-le immédiatement après le changement). Si jamais vous gâchez votre .bashrc et redémarrez, vous ne pourrez peut-être pas vous connecter! Personnellement, je crée également un deuxième utilisateur "admin" sur des machines personnelles afin que, en cas d'urgence (connexion interrompue), je puisse me connecter et utiliser puis utiliser Sudo pour corriger mon autre fichier de connexion .bashrc.

33
Michael Durrant

Il s'agit d'un fichier de configuration bash.

Shells interactifs (sans connexion), puis la configuration est lue à partir de ces fichiers:

  • $HOME/.bashrc

Pour les shells de connexion, la configuration est lue à partir de ces fichiers:

  • /etc/profile (Toujours d'origine)
  • $HOME/.bash_profile (le reste de ces fichiers est vérifié dans l'ordre jusqu'à ce qu'un soit trouvé, puis 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

Interactive Shell vs login Shell

voir man bash pour plus d'informations

8