Shell script et style

Publié : 27.03.2006 - 11h43 par philjfry

Bonjour
J'aimerais savoir si c'est (facilement) possible de styler les sorties (echo) en shell script, pour que certains caractères soient gras, italiques ou soulignés ,
comme dans les pages man, par exemple.
Merci


Publié : 27.03.2006 - 13h49 par Fabien

Je crains que non.

Les pages man utilisent un rendu particulier et une syntaxe particulière.

Très franchement ça doit être possible, mais je ne connais pas de solution simple.


Publié : 27.03.2006 - 17h31 par philjfry

Je m'en doutais un peu :(
Il faudrait apparemment passer par "grotty" et c'est trop compliqué pour ce que je voudrais faire :cry:


Publié : 29.03.2006 - 12h27 par Fabien

Je reviens sur ce que j'ai dit !!!

En fait c'est assez simple, il suffit d'utiliser l'option "-e" de "echo".

Par exemple pour un "Bonjour" en gras:

Code : Tout sélectionner

echo -e '\033[1mBonjour\033[0m'


le "\033[1m" met la suite en gras et le "\033[0m" revient à la normale.

Quelques autres exemples:

Bold: \033[1m
Underline: \033[4m
Magenta: \033[35m
Yellow: \033[33m
Red: \033[31m


Publié : 29.03.2006 - 17h48 par philjfry

Merci mille fois !

:D

le man de echo sur mon mac ne donne que ça pourtant :

Code : Tout sélectionner

SYNOPSIS
     echo [-n] [string ...]
DESCRIPTION ....


et pour ceux que ça intéresse, ça marche même en python :
python -c "print '\033[1mBonjour\033[0m'"


Publié : 29.03.2006 - 18h30 par Fabien

Effectivement, cette fonction n'est pas documentée, va savoir pourquoi...


Publié : 30.03.2006 - 10h43 par milipili

Ce n'est pas documente dans echo puisque ce ne sont pas des options de echo mais des caracteres speciaux (si on peut appeller cela ainsi) gere par le shell (man bash -> builtin -> echo).


Publié : 30.03.2006 - 10h48 par milipili

D'aileurs voici la liste des codes couleurs. Ca peut etre utile (ici repris d'un code C/C++).

# define CL_BLACK "\033[22;30m"
# define CL_RED "\033[22;31m"
# define CL_GREEN "\033[22;32m"
# define CL_BROWN "\033[22;33m"
# define CL_BLUE "\033[22;34m"
# define CL_MAGENTA "\033[22;35m"
# define CL_CYAN "\033[22;36m"
# define CL_GRAY "\033[22;37m"
# define CL_DARKGRAY "\033[01;30m"
# define CL_LIGHTRED "\033[01;31m"
# define CL_LIGHTGREEN "\033[01;32m"
# define CL_YELLOW "\033[01;33m"
# define CL_LIGHTBLUE "\033[01;34m"
# define CL_LIGHTMAGENTA "\033[01;35m"
# define CL_LIGHTCYAN "\033[01;36m"
# define CL_WHITE "\033[01;37m"


Publié : 30.03.2006 - 10h57 par milipili

Euh ... j'ai raconte n'importque quoi ... C'est le terminal qui gere les caracteres speciaux ... Pas le shell ...


Publié : 01.04.2006 - 19h35 par philjfry

Merci. J'aimerai ajouter qu'avec un code en 4x (au lieu de 3x) il est aussi possible de mettre la couleur en arrière plan pex \033[42m pour un arrière plan vert .
Ça marche aussi lors du démarrage en mode single user (pom-s au démarrage).
[edit]
Mais la colorisation ne marche pas si "désactiver la couleur ANSI" est choisi, dans Réglages de la fenêtre > couleur .

Code : Tout sélectionner

#!/bin/bash
#
esc="\033["
echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _ 42 _ _ _ 43"
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
for fore in 30 31 32 33 34 35 36 37;do
      line1="$fore  "
      line2="    "; line3="    "; line4="    "; line5="    "; line6="    ";
      # 1 gras ; 4 souligne; 5 clignote ; 7 inverse ; 8 invisible,mais copi_collable?
      # 2,3,6,9 : inactifs
      for back in 40 41 42 43 44 45 46 47; do
        line1="${line1}${esc}${back};${fore}m Normal  ${esc}0m"
        line2="${line2}${esc}${back};${fore};1m Bold    ${esc}0m"
        line3="${line3}${esc}${back};${fore};5m Blink   ${esc}0m"
        line4="${line4}${esc}${back};${fore};5;1m BBlink  ${esc}0m"
        line5="${line5}${esc}${back};${fore};4m Under   ${esc}0m"
        line6="${line6}${esc}${back};${fore};7;5;1m BInvert ${esc}0m"
      done
      echo -e "$line1\n$line2\n$line3\n$line5\n$line4\n$line6"
      # oui, elles sont dans le desordre, pour mieux voir le souligne !
done

Je reviendrai quand j'aurai fait qqc d'utile avec tout ça !
(bientôt, peut être)