<p class="spip">Pour des explications sur ce qu’est l’invite de commande, le shell, le bash, vous pouvez lire l’article sur <a href="spip.php?article776" class="spip_in">l’interpréteur de commande</a>.</p>

<p class="spip">Le but de l’article est de personnaliser l’invite de commande qui par défaut peut ressembler à cela :<br />
<code class='spip_code' dir='ltr'>[gerald@hportable ~]$</code></p>

<p class="spip">Pour connaître les paramètres de l’invite nous allons afficher la valeur de la variable Bash $PS1.<br />
Celle-ci correspond à la valeur que doit prendre l’invite lorsqu’elle est affichée.<br />
Pour afficher la valeur d’une variable Bash il suffit de faire :<br />
<code class='spip_code' dir='ltr'>echo $le_nom_de_la_variable</code></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[gerald@hportable ~]$ echo $PS1<br />
[\u@\h \W]\$<br />
[gerald@hportable ~]$</code></div>
<p class="spip">On voit apparaître des caractères affichés [, ], @, et $ et aussi les caractères d’échappement \u (le nom d’utilisateur) \h (le nom de machine) et \W (le nom du répertoire dans lequel on se trouve, le répertoire de travail)<br />
On peut commencé par jouer avec les caractères affichés en les modifiant :<br />
<code class='spip_code' dir='ltr'>[gerald@hportable ~]$ PS1="_\u@\h \W_\$ "</code>
ce qui donne :<br />
<code class='spip_code' dir='ltr'>_gerald@hportable ~_$ </code>
ou encore :<br />
<code class='spip_code' dir='ltr'>_gerald@hportable ~_$ PS1="ou_encore_ca_\u@\h \W_\$ "</code>
ce qui donne :<br />
<code class='spip_code' dir='ltr'>ou_encore_ca_gerald@hportable ~_$ </code></p>

<p class="spip">\t donne l’heure<br />
\d donne la date<br />
\h donne le nom de la machine<br />
\\ donne un anti-slash<br />
\r donne Retour à la ligne<br />
\u donne le nom de l’utilisateur<br />
\v # Version du Bash<br />
\w donne le chemin complet par rapport à la racine et le nom du répertoire courant<br />
\W donne uniquement le répertoire courant<br /></p>

<p class="spip">On peut trouver la liste des autres caractères d’échappement sur le howto Bash-Prompt-HOWTO<br />
<a href="http://www.traduc.org/docs/howto/lecture/Bash-Prompt-HOWTO.html#BASH-PROMPT-ESCAPE-SEQUENCES" class="spip_out">http://www.traduc.org/docs/howto/lecture/Bash-Prompt-HOWTO.html#BASH-PROMPT-ESCAPE-SEQUENCES</a></p>

<p class="spip">Tester les commandes suivantes pour avoir un prompt complet :<br />
<code class='spip_code' dir='ltr'>PS1="[ $(date "+%T %d/%m/%y") ][ \u@\H: \w ]\$ "</code><br />
donne<br />
<code class='spip_code' dir='ltr'>[ 13:47:08 24/03/09 ][ gerald@hportable: /usr/bin ]$</code><br /></p>

<p class="spip"><strong class="spip">Utiliser de la couleur</strong></p>

<p class="spip">Ca n’est pas très compliqué mais la ligne devient un peu longue et on peut vite se prendre les pieds dans les fils.<br />
Pour passer tout le prompt en vert on ajoute au prompt normal <code class='spip_code' dir='ltr'>PS1="[\u@\h \W]$ "</code> le code<code class='spip_code' dir='ltr'>\[\033[1;32m\]</code> devant <code class='spip_code' dir='ltr'>[\u@\h \W]$ </code> pour démarrer la couleur verte et le code <code class='spip_code' dir='ltr'>\[\033[1;37m\]</code> derrière pour revenir en blanc.<br />
Ce qui donne :<br />
<code class='spip_code' dir='ltr'>PS1="\[\033[1;32m\][\u@\h \W]$\[\033[1;37m\] "</code></p>

<p class="spip">Le code des couleurs que l’on peut utiliser :<br /></p>

<table>
<tbody><tr><td>Noir</td><td>0 ;30</td><td>Rouge</td><td>0 ;31</td></tr>
<tr><td>Vert</td><td>0 ;32</td><td>Marron</td><td>0 ;33</td></tr>
<tr><td>Bleu</td><td>0 ;34</td><td>Violet</td><td>0 ;35</td></tr>
<tr><td>Cyan</td><td>0 ;36</td><td>Gris clair</td><td>0 ;37</td></tr>
<tr><td>Gris</td><td>1 ;30</td><td>Rose</td><td>1 ;31</td></tr>
<tr><td>Vert clair</td><td>1 ;32</td><td>Marron clair</td><td>1 ;33</td></tr>
<tr><td>Bleu clair</td><td>1 ;34</td><td>Violet clair</td><td>1 ;35</td></tr>
<tr><td>Cyan clair</td><td>1 ;36</td><td>Blanc</td><td>1 ;37</td></tr>
</tbody></table>
<p class="spip"><strong class="spip">Rendre les changements permanent</strong></p>

<p class="spip">Pour rendre les changements de votre prompt permanents, il vous faut éditer le fichier <code class='spip_code' dir='ltr'>.bashrc</code> qui se trouve dans votre <code class='spip_code' dir='ltr'>home</code> et ajouter la ligne <code class='spip_code' dir='ltr'>PS1="\[\033[1;32m\][\u@\h \W]$\[\033[1;37m\] "</code>
Soit vous prenez un éditeur (vi, vim, gedit) soit vous injecter directement à la fin du fichier avec la commande suivante :<br />
<code class='spip_code' dir='ltr'>echo "PS1='\[\033[1;32m\][\u@\h \W]$\[\033[1;37m\] '" >> ~/.bashrc</code><br /></p>

<p class="spip">Vous pouvez également en faire un script que vous enregistrez par exemple sous le nom nom_du_script dans le répertoire <code class='spip_code' dir='ltr'>/home/scripts</code> et rajoutez à la fin du fichier <code class='spip_code' dir='ltr'>.bashrc</code> la ligne <code class='spip_code' dir='ltr'>/home/scripts/nom_du_script</code></p>

<p class="spip">Ouvrez une nouvelle console pour voir le changement.<br /></p>

<p class="spip"><strong class="spip">Un prompt vachement chouette</strong></p>

<p class="spip">Voici l’extrait du site de <strong class="spip">Jipe</strong> qui malheureusement n’existe plus (le site hein).
Insérer la fonction suivante dans le fichier .bashrc de votre utilisateur.<br /></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>bytes2 () { <br />
                a=0<br />
                ls -l | (while read -r A B C D E F; <br />
                do case $A in -*) a=$((a+E)) ;; esac<br />
                done<br />
                echo "scale=3; $a/1024/1024" | bc)<br />
        }<br />
</code></div>
<p class="spip">Testez ensuite si la fonction fonctionne en tapant <code class='spip_code' dir='ltr'>bytes2</code> dans un nouveau terminal. Si la commande <code class='spip_code' dir='ltr'>bc</code> n’est pas trouvée comme c’est le cas sous Mandriva/Linux, vous pouvez l’installer (urpmi bc pour les mandriveux).</p>

<p class="spip">Ensuite vous pouvez tester et comprendre graduellement les lignes suivantes.</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
premier jet:<br />
PS1='  _ _<br />
(*.*) -( \t )-<br />
(   ) -( \u@\H )-<br />
 ~ ~  -( $(pwd) )-<br />
##### -( $(bytes2) Mb )-<br />
cmd > '<br />
<br />
la chouette:<br />
PS1='  _ _ <br />
(*.*) -( \t )-<br />
(   ) -( \u@\H )-<br />
 ~ ~  -( $(pwd) )-<br />
##### -( $(bytes2) Mb )-<br />
cmd > '<br />
<br />
les cellules:<br />
PS1='  _ _ \n<br />
(*.*) -( \t )-<br />
(   ) -( \u@\H )-<br />
 ~ ~  -( $(pwd) )-<br />
##### -( $(bytes2) Mb )-<br />
cmd > '<br />
<br />
le contenu des cellules:<br />
PS1='  _ _ \n<br />
(*.*) -( \t )-<br />
(   ) -( \u@\H )-<br />
 ~ ~  -( $(pwd) )-<br />
##### -( $(bytes2) Mb )-<br />
cmd > '<br />
<br />
le mini prompt de la dernière ligne:<br />
PS1='  _ _ <br />
(*.*) -( \t )-<br />
(   ) -( \u@\H )-<br />
 ~ ~  -( $(pwd) )-<br />
##### -( $(bytes2) Mb )-<br />
cmd > '<br />
<br />
l'ajout des couleurs:<br />
PS1='\[\e[35m\]  _ _ <br />
(*.*) \[\e[1;34m\]-( \[\e[36m\]\t\[\e[34m\] )-<br />
\[\e[35m\](   ) \[\e[1;34m\]-( \[\e[36m\]\u@\H\[\e[34m\] )-<br />
\[\e[35m\] ~ ~  \[\e[1;34m\]-( \[\e[36m\]$(pwd)\[\e[34m\] )-<br />
\[\e[35m\]##### \[\e[1;34m\]-( \[\e[36m\]$(bytes2) Mb\[\e[34m\] )-\[\e[0m\]<br />
cmd > '<br />
</code></div>
<p class="spip">Il existe une variable susceptible de modifier le prompt. il s’agit de <code class='spip_code' dir='ltr'>$PROMPT_COMMAND</code>. elle contient une commande à effectuer avant l’affichage de chaque prompt. il peut s’agir d’une commande ajoutant un élément au prompt :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code><br />
[ jipe@jipe.dream.com: ~ ]$ <br />
[ jipe@jipe.dream.com: ~ ]$ PROMPT_COMMAND='echo -n "$(date) "'<br />
sam aoû 23 22:59:53 CEST 2003 [ jipe@jipe.dream.com: ~ ]$ pwd  <br />
/home/jipe<br />
sam aoû 23 22:59:53 CEST 2003 [ jipe@jipe.dream.com: ~ ]$ unset PROMPT_COMMAND<br />
[ jipe@jipe.dream.com: ~ ]$<br />
</code></div>
<p class="spip">Il peut aussi s’agir d’une commande modifiant totalement le prompt en redéfinissant PS1.<br />
Je vous laisse tester la commande suivante ...</p>

<p class="spip"><code class='spip_code' dir='ltr'>export PROMPT_COMMAND='PS1="C:$(pwd | sed s.^/home/."/Mes Documents/". | sed s././/.g | tr / \\\\\\\\)> "'</code>
Attention le résultat peut heurter la sensibilité de certains d’entre vous ...</p>

<p class="spip">Sinon voilà à quoi Jipe passait son temps libre ... je n’ai malheureusement pas réussi à retrouver le script en téléchargement ... il ne vous reste plus qu’à le faire comme exercice pratique.</p>

<p class="spip"><span class='spip_document_1200 spip_documents spip_documents_center' >
<img src='http://download.tuxfamily.org/assocoagul/drupal-files/spip/cowsay.png' width="498" height="316" alt="" /></span><p>

<p class="spip"><strong class="spip">Liens</strong></p>

<p class="spip"><a href="http://www.traduc.org/docs/howto/lecture/Bash-Prompt-HOWTO.html" class="spip_out">http://www.traduc.org/docs/howto/lecture/Bash-Prompt-HOWTO.html</a><br />
Visiblement ce howto n’a jamais été traduit, proposez votre traduction sur le site :<br /><a href="http://www.traduc.org" class="spip_out">http://www.traduc.org</a></p>