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