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 →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:programmation:bash:config [02/03/2014 14:52] captnfab |
doc:programmation:bash:config [16/08/2023 01:05] (Version actuelle) Switch [Configuration utilisateur] ajout image exemple prompt coloré |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
* Objet : Comprendre à quoi servent les différentes configurations de bash | * Objet : Comprendre à quoi servent les différentes configurations de bash | ||
- | * Niveau requis : {{tag>débutant}} | + | * Niveau requis : {{tag>débutant avisé}} |
* Commentaires : //Bash possède bon nombre d'options et de fichiers de configurations. Comment comprendre tout ça ?// | * Commentaires : //Bash possède bon nombre d'options et de fichiers de configurations. Comment comprendre tout ça ?// | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : {{tag>à-tester}} | + | * Suivi : {{tag>à-compléter à-tester}} |
- | * Création par : **devpsp** 18/08/2010 15:05 | + | * Création par : [[user>devpsp]] le 18/08/2010 15:05 |
* Testé par : | * Testé par : | ||
- | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=2867 | ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | + | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=12294 | ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
+ | |||
+ | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== Les scripts de configuration ===== | ===== Les scripts de configuration ===== | ||
Ligne 21: | Ligne 23: | ||
* ''.bash_profile'' ou ''.bash_login'' ou ''.profile'' | * ''.bash_profile'' ou ''.bash_login'' ou ''.profile'' | ||
+ | |||
* ''.bashrc'' | * ''.bashrc'' | ||
+ | |||
* ''.bash_logout'' | * ''.bash_logout'' | ||
+ | |||
* ''.bash_history'' | * ''.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''. | + | 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 | + | Il est possible de simuler un shell de login en tapant |
<code user>bash -l</code> | <code user>bash -l</code> | ||
Ligne 100: | Ligne 107: | ||
Ces scripts ne concernent que l'utilisateur dans le dossier personnel duquel ils se trouvent. | 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. | Ce sont des fichiers cachés, leur nom débute avec un point. | ||
+ | |||
+ | Mais si vous utilisez simplement [[:doc:systeme:ls |la commande "ls"]] ainsi : | ||
+ | <code user>ls</code> | ||
+ | Vous obtenez : | ||
+ | <file config retour de la commande> | ||
+ | 2010-02-26--10.13.22 fstab phpmyadmin.png | ||
+ | caisse_060810.ods gparted1.png resilier-sfr | ||
+ | commande_sed1.txt liste-mail RMLL_2.m4v | ||
+ | commande_sed2.txt konversation scripts_user | ||
+ | debian-504-i386-netinst.iso listecamera_site site_agen_100806.ods | ||
+ | debian-facile-le-magazine.pdf liste_site.ods site_agen_100809.ods | ||
+ | default | ||
+ | .../...</file> | ||
+ | |||
+ | Ce sont vos fichiers simples présents dans votre //home//. \\ | ||
+ | Mais avec son option ''-l'' ainsi : | ||
+ | <code user>ls -a</code> | ||
+ | vous verrez en plus __tous les fichiers cachés__ : | ||
+ | <file config retour de la commande> | ||
+ | . .gnome2_private nfs-df.odt | ||
+ | .. .gnupg .openoffice.org | ||
+ | 2010-02-26--10.13.22 gparted1.png .openoffice.org2 | ||
+ | .aptitude .gstreamer-0.10 out.ogv | ||
+ | .../...</file> | ||
==== ~/.bash_profile, ~/.bash_login et ~/.profile ==== | ==== ~/.bash_profile, ~/.bash_login et ~/.profile ==== | ||
Ligne 105: | Ligne 136: | ||
On voit que le fichier ''~/.bash_profile'' par défaut ne fait rien d'autre que charger le ''~/.bashrc''. | On voit que le fichier ''~/.bash_profile'' par défaut ne fait rien d'autre que charger le ''~/.bashrc''. | ||
- | <file bash ~/.bash_profile># ~/.bash_profile: executed by bash(1) for login shells. | + | <file bash ~/.bash_profile>if [ -f ~/.bashrc ]; then |
- | # see /usr/share/doc/bash/examples/startup-files for examples. | + | |
- | # the files are located in the bash-doc package. | + | |
- | + | ||
- | # the default umask is set in /etc/login.defs | + | |
- | #umask 022 | + | |
- | + | ||
- | # include .bashrc if it exists | + | |
- | if [ -f ~/.bashrc ]; then | + | |
. ~/.bashrc | . ~/.bashrc | ||
fi</file> | fi</file> | ||
De même, le ''~/.profile'' par défaut vérifie que le shell est bien bash, puis interprète le ''~/.bashrc''. | De même, le ''~/.profile'' par défaut vérifie que le shell est bien bash, puis interprète le ''~/.bashrc''. | ||
- | Il vérifie en plus si le dossier ''~/bin'' existe, et, le cas échéant, l'ajoute au PATH. | + | <file bash ~/.profile>if [ -n "$BASH_VERSION" ]; then |
- | + | ||
- | <file bash ~/.profile> | + | |
- | # ~/.profile: executed by the command interpreter for login shells. | + | |
- | # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login | + | |
- | # exists. | + | |
- | # see /usr/share/doc/bash/examples/startup-files for examples. | + | |
- | # the files are located in the bash-doc package. | + | |
- | + | ||
- | # the default umask is set in /etc/profile; for setting the umask | + | |
- | # for ssh logins, install and configure the libpam-umask package. | + | |
- | #umask 022 | + | |
- | + | ||
- | # if running bash | + | |
- | if [ -n "$BASH_VERSION" ]; then | + | |
# include .bashrc if it exists | # include .bashrc if it exists | ||
if [ -f "$HOME/.bashrc" ]; then | if [ -f "$HOME/.bashrc" ]; then | ||
. "$HOME/.bashrc" | . "$HOME/.bashrc" | ||
fi | fi | ||
- | fi | + | fi</file> |
- | # set PATH so it includes user's private bin if it exists | + | Il vérifie en plus si le dossier ''~/bin'' existe, et, le cas échéant, l'ajoute au PATH. |
- | if [ -d "$HOME/bin" ] ; then | + | <file bash ~/.profile>if [ -d "$HOME/bin" ] ; then |
PATH="$HOME/bin:$PATH" | PATH="$HOME/bin:$PATH" | ||
fi</file> | fi</file> | ||
Ligne 146: | Ligne 155: | ||
==== ~/.bashrc ==== | ==== ~/.bashrc ==== | ||
- | Pour afficher votre propre fichier ''.bashrc'', tapez : | + | Le fichier ''~/.bashrc'' est celui contenant la réelle configuration utilisateur de **bash**. |
- | <code user>cat ~/.bashrc</code> | + | |
- | Que voici: | + | === Uniquement pour le mode interactif === |
- | FIXME | + | Il commence par vérifier qu'il est bien lancé par un utilisateur et non interpréteur d'un script((via #!/bin/bash)). Il s'arrête si ça n'est pas le cas. |
- | <code bash ~/.bashrc># ~/.bashrc: executed by bash(1) for non-login shells. | + | <code bash ~/.bashrc>case $- in |
- | # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) | + | |
- | # for examples | + | |
- | + | ||
- | # If not running interactively, don't do anything | + | |
- | case $- in | + | |
*i*) ;; | *i*) ;; | ||
*) return;; | *) return;; | ||
- | esac | + | esac</code> |
- | # don't put duplicate lines or lines starting with space in the history. | + | === Historique === |
- | # See bash(1) for more options | + | |
- | HISTCONTROL=ignoreboth | + | |
- | # append to the history file, don't overwrite it | + | Les lignes suviantes concernent la configuration de l'historique de bash. |
+ | <file bash ~/.bashrc>HISTCONTROL=ignoreboth | ||
shopt -s histappend | shopt -s histappend | ||
- | |||
- | # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) | ||
HISTSIZE=1000 | HISTSIZE=1000 | ||
- | HISTFILESIZE=2000 | + | HISTFILESIZE=2000</file> |
+ | Ici, l'historique ne stocke pas les doublons, conserve le précédent historique, mais le limite à 1000 lignes et 2ko. | ||
- | # check the window size after each command and, if necessary, | + | === Taille du terminal === |
- | # update the values of LINES and COLUMNS. | + | Il met à jour la les variables d'environnement de taille du terminal: |
- | shopt -s checkwinsize | + | <file bash ~/.bashrc>shopt -s checkwinsize</file> |
- | # If set, the pattern "**" used in a pathname expansion context will | + | === Chroot === |
- | # match all files and zero or more directories and subdirectories. | + | Il définit la variable debian_chroot s'il trouve un fichier ''/etc/debian_chroot''. Cette variable sera ensuite utilisée dans le prompt. |
- | #shopt -s globstar | + | <file bash ~/.bashrc>if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then |
- | + | ||
- | # make less more friendly for non-text input files, see lesspipe(1) | + | |
- | #[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" | + | |
- | + | ||
- | # set variable identifying the chroot you work in (used in the prompt below) | + | |
- | if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then | + | |
debian_chroot=$(cat /etc/debian_chroot) | debian_chroot=$(cat /etc/debian_chroot) | ||
- | fi | + | fi</file> |
- | # set a fancy prompt (non-color, unless we know we "want" color) | + | === Terminal en couleur === |
- | case "$TERM" in | + | Il tente de déterminer par plusieurs moyens s'il s'agit d'un terminal couleur ou non : |
+ | <file bash ~/.bashrc>case "$TERM" in | ||
xterm-color) color_prompt=yes;; | xterm-color) color_prompt=yes;; | ||
esac | esac | ||
- | # uncomment for a colored prompt, if the terminal has the capability; turned | ||
- | # off by default to not distract the user: the focus in a terminal window | ||
- | # should be on the output of commands, not on the prompt | ||
#force_color_prompt=yes | #force_color_prompt=yes | ||
if [ -n "$force_color_prompt" ]; then | if [ -n "$force_color_prompt" ]; then | ||
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then | if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then | ||
- | # We have color support; assume it's compliant with Ecma-48 | ||
- | # (ISO/IEC-6429). (Lack of such support is extremely rare, and such | ||
- | # a case would tend to support setf rather than setaf.) | ||
color_prompt=yes | color_prompt=yes | ||
else | else | ||
color_prompt= | color_prompt= | ||
fi | fi | ||
- | fi | + | fi</file> |
+ | Vous pouvez forcer la détection en décommentant ''#force_color_prompt=yes''. | ||
- | if [ "$color_prompt" = yes ]; then | + | === Prompt === |
+ | |||
+ | Il définit le prompt suivant que le terminal soit en couleur ou non : | ||
+ | <file bash ~/.bashrc>if [ "$color_prompt" = yes ]; then | ||
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | ||
else | else | ||
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' | PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' | ||
fi | fi | ||
- | unset color_prompt force_color_prompt | + | unset color_prompt force_color_prompt</file> |
- | # If this is an xterm set the title to user@host:dir | + | <note tip>Il est possible de configurer son prompt avec des éléments et des couleurs de votre choix. Il suffit de configurer la variable $PS1 vous même dans votre fichier de configuration .bashrc. Exemple :<file config nom> |
+ | PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$' | ||
+ | </file> {{/file-R71cdd53a1ad2a7e72584f602d833b88e.png}} [[https://www.howtogeek.com/307701/how-to-customize-and-colorize-your-bash-prompt/|Article détaillant les codes couleurs et éléments possibles]] , ou un générateur de prompt en ligne, pratique : [[https://ezprompt.net/|https://ezprompt.net/]] </note> | ||
+ | |||
+ | |||
+ | === Titre du terminal === | ||
+ | Si le terminal est compatible xterm ou rxvt, il change le prompt de manière à changer le titre tu terminal. | ||
+ | <file bash ~/.bashrc># If this is an xterm set the title to user@host:dir | ||
case "$TERM" in | case "$TERM" in | ||
xterm*|rxvt*) | xterm*|rxvt*) | ||
Ligne 223: | Ligne 224: | ||
*) | *) | ||
;; | ;; | ||
- | esac | + | esac</file> |
+ | |||
+ | |||
+ | |||
+ | |||
+ | === Alias === | ||
+ | |||
+ | Les alias sont des outils très pratiques, voir [[:doc:programmation:bash:alias]] pour un description plus approfondie. | ||
- | # enable color support of ls and also add handy aliases | + | Le fichier ''~/.bashrc'' commence par définir des alias colorés pour ls dans le cas d'un terminal coloré : |
+ | <file bash ~/.bashrc># enable color support of ls and also add handy aliases | ||
if [ -x /usr/bin/dircolors ]; then | if [ -x /usr/bin/dircolors ]; then | ||
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" | test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" | ||
Ligne 235: | Ligne 244: | ||
#alias fgrep='fgrep --color=auto' | #alias fgrep='fgrep --color=auto' | ||
#alias egrep='egrep --color=auto' | #alias egrep='egrep --color=auto' | ||
- | fi | + | fi</file> |
- | # some more ls aliases | + | Le fichier propose ensuite de définir quelques alias bien pratiques : |
+ | <file bash ~/.bashrc># some more ls aliases | ||
#alias ll='ls -l' | #alias ll='ls -l' | ||
#alias la='ls -A' | #alias la='ls -A' | ||
- | #alias l='ls -CF' | + | #alias l='ls -CF'</file> |
- | # Alias definitions. | + | Enfin, si le fichier ''~/.bash_aliases'' existe, il l'interprète : |
- | # You may want to put all your additions into a separate file like | + | <file bash ~/.bashrc>if [ -f ~/.bash_aliases ]; then |
- | # ~/.bash_aliases, instead of adding them here directly. | + | |
- | # See /usr/share/doc/bash-doc/examples in the bash-doc package. | + | |
- | + | ||
- | if [ -f ~/.bash_aliases ]; then | + | |
. ~/.bash_aliases | . ~/.bash_aliases | ||
- | fi | + | fi</file> |
+ | |||
+ | 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. | ||
+ | |||
+ | === Autocomplétion === | ||
- | # enable programmable completion features (you don't need to enable | + | Bash tente enfin de charger [[:doc:programmation:bash:autocompletion|l'autocomplétion]] si elle est disponible et souhaitable : |
- | # this, if it's already enabled in /etc/bash.bashrc and /etc/profile | + | <file bash ~/.bashrc>if ! shopt -oq posix; then |
- | # sources /etc/bash.bashrc). | + | |
- | if ! shopt -oq posix; then | + | |
if [ -f /usr/share/bash-completion/bash_completion ]; then | if [ -f /usr/share/bash-completion/bash_completion ]; then | ||
. /usr/share/bash-completion/bash_completion | . /usr/share/bash-completion/bash_completion | ||
Ligne 260: | Ligne 268: | ||
. /etc/bash_completion | . /etc/bash_completion | ||
fi | fi | ||
- | fi</code> | + | fi</file> |
| | ||
+ | ==== ''~/.bash_logout'' ==== | ||
+ | |||
+ | Le fichier ''~/.bash_logout'' s'occupe d'effacer le terminal à la déconnexion : | ||
+ | <file bash ~/.bash_logout> | ||
+ | if [ "$SHLVL" = 1 ]; then | ||
+ | [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q | ||
+ | fi</file> | ||
+ | |||
+ | ==== ''~/.bash_history'' ==== | ||
+ | |||
+ | Contient tout [[:doc:programmation:bash:history]|l'historique des commandes]] que vous avez saisies. | ||
+ | ===== Voir aussi ===== | ||
+ | * [[doc:programmation:shells:debuter-avec-les-scripts-shell-bash | Apprendre à rédiger des scripts sous bash]] |