LA MEILLEURE SOLUTION : BASH : shopt -s extdebug trap "printf '\e[0m'" DEBUG PS1='\[\e[0;34m\]\h: \[\e[1;34m\]\W\[\e[m\] \[\e[0;32m\]\u\$ \[\e[m\]\[\e[1;31m\]' # 0;31 pour ne PAS avoir de gras ou PS1='\[\e[0;34m\]\h: \[\e[1;34m\]\W\[\e[m\] \[\e[0;31m\]\u\$ \[\e[m\]\[\e[1;32m\]' PS1='\[\e[0;34m\]\h: \[\e[1;34m\]\W\[\e[m\] \[\e[0;31m\]\u\$ \[\e[m\]\[\e[40m\e[1;37m\]' PS1='\[\e[0;34m\]\h: \[\e[1;34m\]\W\[\e[m\] \[\e[0;31m\]\u\$ \[\e[m\]\[\e[41m\e[1;33m\]' ZSH : preexec() { printf '\e[0m' } PS1=$'\e[0;32m%m:%1d\$ \e[1;31m' # 0;31 pour ne PAS avoir de gras _________________________________________________________________________________________________ QUESTION : Un peu plus important, peut-on régler Bash pour qu'il insère automatiquement une expression devant chaque commande saisie ? Exemple, je veux pouvoir taper ls et que s'exécute en réalité sudo ls l'expression à insérer sera constante (sudo dans l'exemple ci-dessus). En revanche la commande saisie doit pouvoir être n'importe quoi (raison pour laquelle les alias ne constituent pas une solution adaptée ou alors il faudrait pouvoir définir un alias générique mais je ne crois que cela soit possible). Idéalement je voudrais que l'expression insérée ne soit pas visible. RÉPONSES : LE MOINS PIRE (mais moyennement satisfaisant), ne colorier QUE le prompt (exemples) : PS1='\h: \[\e[1;34m\]\W\[\e[m\] \[\e[0;31m\]\u\$ \[\e[m\]' PS1="\`if [ \$? != 0 ]; then echo \[\e[33m\]—=== \[\e[31m\]Oh noes, bad command \[\e[33m\]===—; fi\`\n\[\e[0;37m\][\[\e[1;31m\]\@\[\e[0;37m\]] \[\e[0;32m\]\u@\h \[\e[0;37m\][\[\e[1;34m\]\w\[\e[0;37m\]] \[\e[0;32m\]\$ \[\e[0m\] " Coloration de stderr (seulement) / exemple : find / -name hosts 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done) C'est un peu de la bidouille, mais on peut tenter un : $ PREFIX="time" # Ton préfixe $ while read -p "$PS1" REPLY; do eval "$PREFIX $REPLY"; done Voici ce que ça donne avec "time" (qui affiche à la fin les trois lignes de durées d'exécution) : $ ls Makefile simulateur-chantier simulateur-chantier.c real 0m0.002s user 0m0.000s sys 0m0.000s $ ls -l /etc/ | wc -l 284 real 0m0.071s user 0m0.000s sys 0m0.008s $ _______ AMELIORATIONS : PREFIX="time" ; while read -ep "Et alors ? " REPLY; do eval "$PREFIX $REPLY"; done echo $REPLY >> ~/.bash_history ; history -n PREFIX="time" ; while read -ep "Et alors ? " REPLY; do eval "$PREFIX $REPLY" ; echo "$REPLY" >> ~/.bash_history ; history -n ; done $REPLY | grcat conf.defaut PREFIX="time" ; while read -ep "Et alors ? " REPLY; do eval "$REPLY" | grcat conf.defaut ; echo "$REPLY" >> ~/.bash_history ; history -n ; done => problème avec programmes ou usages interactif. Exemples : grep toto # sans nom de fichier man ls _______________________ SINON… Mais ça pose des problèmes car read ne gère pas l'historique des commandes, ni le développement du prompt, etc. Une autre solution : plus élégante mais elle ne dissimule pas la commande insérée. On modifie l'affectation de la touche Entrée dans Readline (la bibliothèque que Bash utilise pour gérer le clavier). $ bind 'RETURN: "\e[1~grc \e[4~\n"' A chaque fois qu'on appuie sur entrée, le curseur se déplacement en première position, insère la chaîne "grc ", retourne en dernière position et insère un retour-chariot. À insérer bien sûr dans le .bashrc Ça marche mais la chaîne "grc" est visible sur la ligne de commande et dans l'historique. Je ne vois pas comment la dissimuler.