Niveau :
Résumé : export PS1="> "
Désolé de ne pas écrire plus souvent. Et ca risque de durer encore un peu puisque je pars en vacances ...
PS veut dire prompt string. Les 4 prompt string de bash sont les chaines de caractères affichées par le shell en différentes situations. Nous allons nous intéresser à PS1 mais sachez que la suite vaut pour toutes les autres.
Exemples
Je vais faire simple : des exemples de chaînes ainsi que la capture d'écran associée, il ne vous reste plus qu'a choisir et à copier/coller dans votre .bashrc
Toutes les captures ont été faites avec les settings suivants :
- user : peck
- hostname : mamachine.linux-attitude.fr
Exemples unilignes
PS1 | Fond noir / Fond Blanc |
---|---|
"[\t] \[\e[01;32m\]\u\[\e[01;33m\]@\h\[\e[00m\]:\[\e[01;34m\]\w\[\e[00m\]\$ " | ![]() ![]() |
"\[\033[01;32m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]" | ![]() ![]() |
"\[\033[0;34m\][\[\033[0;31m\]$(date +%H%M)\[\033[0;34m\]]\[\033[0;34m\][\[\033[1;31m\]\u@\h:\w\[\033[0;34m\]]\[\033[1;37m\]$\[\033[0m\] " | ![]() ![]() |
|
Exemples multilignes
PS1 | Fond noir / Fond Blanc |
---|---|
"\[\e]0;\u@\h \w\a\]\[\e[1;31m\]\u\[\e[1;34m\]@\[\e[0;32m\]\h \[\e[0;33m\]\w \[\e[0;31m\]$(uptime|sed -e 's/.*: \([^,]*\), \([^,]*\), \([^,]*\).*/\1 \2 \3/') \[\e[0;34m\]\D{%Y-%m-%d %H:%M:%S} \[\e[0m\]\n\$ " | ![]() ![]() |
|
Exemples monochromes
PS1 | Fond noir / Fond Blanc |
---|---|
"[\t][\u@\h:\w]\$ " | ![]() ![]() |
"\u@\h \w> " | ![]() ![]() |
"\!|\h|$(uname -r)|\$?> " | ![]() ![]() |
"\[\e[1;34m\]\u@\h \w>\[\e[0m\] " | ![]() ![]() |
"\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] " | ![]() ![]() (Ici tout est dans le titre) |
Faites votre choix
Cookbook
Si les exemples ne vous conviennent pas, voici un ensemble de recettes pour créer un prompt qui vous ressemble :
- load average : "\$(cut -d ' ' -f 1-3 /proc/loadavg)"
- uptime : "\$(uptime | cut -d, -f1 | sed -e 's/.*up//')"
- un prompt qu'on peut copier/coller sans provoquer d'erreurs : ": <texte> ;"
- user@host:/répertoire : "\u@\h:\w"
- date et heure : "[\d \t]"
- un bip à chaque ligne : "\[\a\]"
- changer la couleur du texte (code couleur voir ci dessous) : "\[\e[<code_couleur>m\]"
- revenir à la couleur originale du shell (en fin de ligne) : "\[\e[0m\]"
- code de retour de la dernière commande : "-> \$?"
- nombre de jobs mis en background par le shell : "[\j]"
- nombre de jobs en pause : "\$(jobs | wc -l | awk '{print $1}')"
- nombre de processus en cours d'exécution : "\$(ps ax | wc -l | tr -d ' ')"
- afficher le tty en cours : "$(temp=$(tty) ; echo ${temp:5})"
- chemin limité à 20 caractères : "\$(a='\w';b=\${a: -20};b=\${b:+..\$b};echo \${b:-\$a})"
- changer le texte de titre du terminal (xterm, konsole ...) : "\[\e]0;<Texte>\a\]"
- afficher l'état de la gestion de version en cours (voir ci dessous) : "$(__vcs_dir)"
- afficher la sortie d'une commande : "\$(<commande>)"
Codes couleur ANSI
Il est possible d'indiquer plusieurs codes simultanément en les séparant par un ';'.
From wikipedia :
Code | Effect | Note |
---|---|---|
0 | Reset / Normal | all attributes off |
1 | Intensity: Bold | |
2 | Intensity: Faint | not widely supported |
3 | Italic: on | not widely supported. Sometimes treated as inverse. |
4 | Underline: Single | |
5 | Blink: Slow | less than 150 per minute |
6 | Blink: Rapid | MS-DOS ANSI.SYS; 150 per minute or more |
7 | Image: Negative | inverse or reverse; swap foreground and background |
8 | Conceal | not widely supported |
21 | Underline: Double | not widely supported |
22 | Intensity: Normal | not bold and not faint |
24 | Underline: None | |
25 | Blink: off | |
27 | Image: Positive | |
28 | Reveal | conceal off |
30–39 | Set foreground color, normal intensity | 3x, where x is from the color table below |
40–49 | Set background color, normal intensity | 4x, where x is from the color table below |
90–99 | Set foreground color, high intensity | aixterm |
100–109 | set background color, high intensity | aixterm |
Intensité | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 |
---|---|---|---|---|---|---|---|---|---|
Normal | Black | Red | Green | Yellow[5] | Blue | Magenta | Cyan | White | reset |
Brillant | Black | Red | Green | Yellow | Blue | Magenta | Cyan | White |
Gestion de version
Pour que la méthode de gestion de version fonctionne, il faut ajouter le code suivant dans son .bashrc :
alias svnwdiff="svn diff --diff-cmd /home/spaillar/vimdiff-wrapper.sh" function cvswdiff { vimdiff $1 <(cvs co -p $2 $(cat $(dirname $1)/CVS/Repository)/$(basename $1)) ;} function vlog { # cvs cvs_log() { [ -d "CVS" ] || return 1 cvs log "$@" | vim - } # subversion svn_log() { [ -d ".svn" ] || return 1 svn log -v "$@" | vim - } # git git_log() { base_dir=$(git rev-parse --show-cdup 2>/dev/null) || return 1 git log --name-status "$@" | vim - } git_log "$@" || svn_log "$@" || cvs_log "$@" } function vwdiff { vim -c ":VCSVimDiff" $1 } function vpull { # cvs cvs_pull() { [ -d "CVS" ] || return 1 cvs -q up -d } # subversion svn_pull() { [ -d ".svn" ] || return 1 svn up } # git git_pull() { base_dir=$(git rev-parse --show-cdup 2>/dev/null) || return 1 git pull } git_pull "$@" || svn_pull "$@" || cvs_pull "$@" } _bold=$(tput bold) _normal=$(tput sgr0) _yellow=$(tput setaf 3) _green=$(tput setaf 2) __vcs_dir() { local vcs base_dir sub_dir ref sub_dir() { local sub_dir sub_dir=$(readlink -f "${PWD}") sub_dir=${sub_dir#$1} echo ${sub_dir#/} } # git git_dir() { base_dir=$(git rev-parse --show-cdup 2>/dev/null) || return 1 if [ -n "$base_dir" ]; then base_dir=`cd $base_dir; pwd` else base_dir=$PWD fi sub_dir=$(git rev-parse --show-prefix) sub_dir="/${sub_dir%/}" ref=$(git symbolic-ref -q HEAD || git name-rev --name-only HEAD 2>/dev/null) ref=${ref#refs/heads/} vcs="git" alias pull="git pull" alias commit="git commit" alias push="git push" # alias revert="svn revert" } # subversion svn_dir() { [ -d ".svn" ] || return 1 base_dir="." while [ -d "$base_dir/../.svn" ]; do base_dir="$base_dir/.."; done base_dir=`cd $base_dir; pwd` sub_dir="/$(sub_dir "${base_dir}")" ref=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }') vcs="svn" alias pull="svn up" alias commit="svn commit" alias push="svn ci" alias revert="svn revert" } # mercurial hg_dir() { base_dir="." while [ ! -d "$base_dir/.hg" ]; do base_dir="$base_dir/.."; [ $(readlink -f "${base_dir}") = "/" ] && return 1; done base_dir=$(readlink -f "$base_dir") sub_dir="/$(sub_dir "${base_dir}")" ref=$(< "${base_dir}/.hg/branch") hgqtop=$(hg qtop) if [[ $hgqtop == 'No patches applied' ]]; then extra=""; else extra=" >> $hgqtop" fi vcs="hg" } # cvs cvs_dir() { [ -d "CVS" ] || return 1 base_dir="." while [ -d "$base_dir/../CVS" ]; do base_dir="$base_dir/.."; done base_dir=`cd $base_dir; pwd` sub_dir="/$(sub_dir "${base_dir}")" vcs="cvs" alias pull="cvs -q up -d" alias commit="cvs commit" alias push="cvs ci" alias revert="cvs revert" } # hg_dir || git_dir || svn_dir || cvs_dir || base_dir="$PWD" git_dir || svn_dir || cvs_dir || base_dir="$PWD" echo "${_green}${_bold}${vcs:+($vcs)}${_yellow}${_bold}${vcs:+[$ref]}${_normal}${base_dir/$HOME/~}${_yellow}${_bold}${vcs:+${_bold}${sub_dir}${_normal}$extra}" } PS1='${debian_chroot:+($debian_chroot)}\u@\h:$(__vcs_dir)${_normal}\$ '
Et vous quel prompt utilisez vous ?
Comments