Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ceci est une ancienne révision du document !
Bash possède comme la plupart des logiciels des fichiers de configuration globaux à tout le système, rangés dans /etc
et des fichiers personnels, fichiers cachés2) rangés dans le répertoire utilisateur (« ~
»).
Les scripts concernant tous les utilisateurs du système sont les suivants :
Les fichiers de configuration personnels sont les suivants
.bash_profile
ou .bash_login
ou .profile
.bashrc
.bash_logout
.bash_history
Au lancement d'un shell de login (par exemple via ssh ou dans un tty), bash interprète le fichier /etc/profile
s'il existe, puis le fichier ~/.bash_profile
. S'il ne trouve pas ce dernier, il essaye d'interpréter le fichier ~/.bash_login
, et à défaut tente le fichier ~/.profile
.
Il est possible de simmuler un shell de login en tapant
bash -l
Au lancement d'un shell non-interactif, c'est le fichier /etc/bash.bashrc
qui est lu, suivi de ~/.bashrc
.
Les chemins contenant les exécutables sont déclarés dans la variable d'environnement PATH via le fichier /etc/profile
Voici l'extrait du /etc/profile
définissant les PATH :
if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" fi export PATH
Ici 4 chemins sont indiqués, séparés par le caractère “:
”.
Vous pouvez les utiliser ainsi :
Le fichier /etc/profile
vérifie ensuite d'il s'agit d'un shell bash interractif. Si c'est le cas, il charge les options globales spécifiques à bash (contenues dans /etc/bash.bashrc
).
if [ "$PS1" ]; then if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi
Dans le cas contraire, il définit les prompts minimaux pour root et pour les utilisateurs.
Enfin, /etc/profile
charge les fichiers de configuration externes (potentiellement installés par l'utilisateur ou par d'autres paquets Debian), situés dans /etc/profile.d/
:
# The default umask is now handled by pam_umask. # See pam_umask(8) and /etc/login.defs. if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi
Ces scripts ne concernent que l'utilisateur dans le dossier personnel duquel ils se trouvent. Ce sont des fichiers cachés, leur nom débute avec un point.
On voit que le fichier ~/.bash_profile
par défaut ne fait rien d'autre que charger le ~/.bashrc
.
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
De même, le ~/.profile
par défaut vérifie que le shell est bien bash, puis interprète le ~/.bashrc
.
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
Il vérifie en plus si le dossier ~/bin
existe, et, le cas échéant, l'ajoute au PATH.
if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
Le fichier ~/.bashrc
est celui contenant la réelle configuration utilisateur de bash.
Il commence bas vérifier qu'il est bien lancé par un utilisateur et non interpréteur d'un script3). Il s'arrête si ça n'est pas le cas.
case $- in *i*) ;; *) return;; esac
Les lignes suviantes concernent la configuration de l'historique de bash.
HISTCONTROL=ignoreboth shopt -s histappend HISTSIZE=1000 HISTFILESIZE=2000
Ici, l'historique ne stocke pas les doublons, conserve le précédent historique, mais le limite à 1000 lignes et 2ko.
Il met à jour la les variables d'environnement de taille du terminal:
shopt -s checkwinsize</code> === Chroot === Il définit la variable debian_chroot s'il trouve un fichier ''/etc/debian_chroot''. Cette variable sera ensuite utilisée dans le prompt. <file bash ~/.bashrc>if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then debian_chroot=$(cat /etc/debian_chroot) fi
Il tente de déterminer par plusieurs moyens s'il s'agit d'un terminal couleur ou non :
case "$TERM" in xterm-color) color_prompt=yes;; esac #force_color_prompt=yes if [ -n "$force_color_prompt" ]; then if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then color_prompt=yes else color_prompt= fi fi
Vous pouvez forcer la détection en décommentant #force_color_prompt=yes
.
Il définit le prompt suivant que le terminal soit en couleur ou non :
if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi unset color_prompt force_color_prompt
Si le terminal est compatible xterm ou rxvt, il change le prompt de manière à changer le titre tu terminal.
# If this is an xterm set the title to user@host:dir case "$TERM" in xterm*|rxvt*) PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;; *) ;; esac
Les alias sont des outils très pratiques, voir alias pour un description plus approfondie.
Le fichier ~/.bashrc
commence par définir des alias colorés pour ls dans le cas d'un terminal coloré :
# enable color support of ls and also add handy aliases if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" alias ls='ls --color=auto' #alias dir='dir --color=auto' #alias vdir='vdir --color=auto' #alias grep='grep --color=auto' #alias fgrep='fgrep --color=auto' #alias egrep='egrep --color=auto' fi
Le fichier propose ensuite de définir quelques alias bien pratiques :
# some more ls aliases #alias ll='ls -l' #alias la='ls -A' #alias l='ls -CF'
Enfin, si le fichier ~/.bash_aliases
existe, il l'interprète :
if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi
Aussi, si vous voulez définir des alias personnels, la méthode la plus propre et portable est de les définir dans un fichier ~/.bash_aliases
, à créer.
Bash tente enfin de charger l'autocomplétion si elle est disponible et souhaitable :
if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi