#1 Le 04/11/2017, à 13:50
- Gryphus71
[Résolu] Problem de texte en couleur et décalé via un printf
Bonjour,
je cherche à faire une belle mise en page d'un résultat et but dès sur :
if [[ "$etat_ping" == "OK" ]]
then etat_ping=$(printf "\e[92m%s\e[0m" "OK")
else etat_ping=$(printf "\e[91m%s\e[0m" "KO")
fi
printf "%-16s%-5s%-18s%-18s%\n" $ip $etat_ping $last_ping_ok $last_ping_ko
}
Résultat :
IP Ping DernierOK DernierKO
195.132.234.59 OK20171104-13:49:38 20171101-00:00:00
On voit que je réserve 5 caractère pour afficher le OK ou KO et pourtant la date qui suit (une chaine de caractères) se retrouver collée.
Avez vous une solution ? je tourne en rond.
Merci !
Dernière modification par Gryphus71 (Le 04/11/2017, à 16:38)
Hors ligne
#2 Le 04/11/2017, à 16:38
- Gryphus71
Re : [Résolu] Problem de texte en couleur et décalé via un printf
Résolu en le faisant sur plusieurs lignes ... je me suis dit que : vu que le printf ne fait pas de retour à la ligne automatiquement (comme echo), je pouvais essayer comme ça"
printf "%-16s" $ip
if [[ "$etat_ping" == "OK" ]]
then printf "\e[92m%-5s\e[0m" "OK"
else printf "\e[91m%-5s\e[0m" "KO"
fi
printf "%-18s%-18s\n" $last_ping_ok $last_ping_ko
Hors ligne
#3 Le 04/11/2017, à 17:08
- pingouinux
Re : [Résolu] Problem de texte en couleur et décalé via un printf
Bonjour,
C'est parce qu'en #1 la variable etat_ping contient 11 caractères
then etat_ping=$(printf "\e[92m%s\e[0m" "OK")
et en #2 "OK" fait 2 caractères et ne dépasse pas du format %-5s
then printf "\e[92m%-5s\e[0m" "OK"
Ajouté :
Pour info, tu peux remplacer
then etat_ping=$(printf "\e[92m%s\e[0m" "OK")
par
then printf -v etat_ping "\e[92m%s\e[0m" "OK"
Dernière modification par pingouinux (Le 04/11/2017, à 17:12)
Hors ligne
#4 Le 04/11/2017, à 18:11
- Watael
Re : [Résolu] Problem de texte en couleur et décalé via un printf
voilà pourquoi on ne stocke pas le format et les données dans une même variable.
les formats peuvent être stockées dans des variables, et se concaténer comme/avec n'importe quelle chaîne :
clean='\033[0m'
if test ...
then
format='\033[32m...'
else
format='\033[31m...'
fi
printf "${format}%-5s${clean}%-5s...\n" "$variable_1" "$variable_n+1"
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 04/11/2017, à 19:39
- kholo
Re : [Résolu] Problem de texte en couleur et décalé via un printf
salut,
avec echo on peut revenir en début de ligne et ne pas sauté de ligne
démo :
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}"
FONCTION=""
VERSION="alpha"
# NOTES DE VERSIONS
# ----------------------------------------------
#
# ----------------------------------------------
echo "lancement $nomlogiciel..."
progress_bar () {
nbre=$( echo $1/2 | bc )
local n
local m=0
echo -en "\r"
echo -en "$2 [" # ici texte AVANT la progressbar
for ((n=1;n<=$nbre;n++)); do
echo -n "#"
done
while [[ $nbre -ne 50 ]] ; do
((nbre++))
echo -n " "
done
echo -n "] - $1 %" # ici texte APRES la progressbar
}
echo "appel de progress_bar 20"
progress_bar 20 "du texte..."
sleep 3
clear
le_texte="un nom ici"
for f in {1..100}; do
progress_bar $f "$le_texte"
sleep .1
done
echo ""
sleep 1
echo -en "une ligne"
sleep 1
echo -en "\rune autre ligne"
sleep 1
echo -en "\ret encore une ligne"
sleep 1
echo -en "\rtrop piti ! ->"
exit 0
Hors ligne