Bonjour à tous,
Je me suis inscrit aujourd'hui au forum pour vous poser une question qui m'occupe depuis déjà quelques heures.
Mon problème est simple : je veux pouvoir justifier du texte au milieu de mon terminal.
Pour résoudre ce problème, j'ai rencontré la solution
dont je comprends la syntaxe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf '%*b\n' $(( ($COLUMNS+${#montexte})/2 )) "$montexte"
Tout se passe bien, mon 'ASCII art' pour commencer ma banner ssh (motd) se justifie correctement, mais alors survient le problème : dans une conditionnelle (if then), je veux afficher un message d'alerte si l'utilisateur est sudoer, et j'ai la bonne idée d'utiliser l'encodage ANSI (pour mes couleurs et effets, par exemple \e[0m).
L'option b de printf me permet d'interpréter correctement la chaine (ie met en pratique les couleurs/effets), mais le problème est la longueur faussée de la chaine : des caractères invisibles (de style je suppose) sont comptés avec ${#montexte}.
J'ai pu découvrir avecque '\e[0m' semble devenir '^[[0m', et j'ai donc essayé de supprimer ces caractères dans la chaine, au moins pour avoir la longueur (ensuite je les affichent pour avoir le style, hein) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo -e $montexte | cat -v
Bon ici tout vas bien, mais ce qui m'as fait craquer, c'est printf : la substition des caractères spéciaux semble différente. En effet, la longueur semblait totalement aléatoire pour arriver à un texte centré (sachant que printf attends la longueur de la chaine, qu'il complète au début par des espaces).
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo -e $montexte | sed -E 's:\^\[\[[0-9]+m::g'
J'ai vraiment besoin de votre aide, rien ne se trouve sur Internet à ma connaissance.
Bonne journée à vous,
Merci d'avance !
Partager