Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/11/2017, à 14: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, à 17:38)

Hors ligne

#2 Le 04/11/2017, à 17: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" smile

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, à 18: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, à 18:12)

Hors ligne

#4 Le 04/11/2017, à 19: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, à 20: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 : cool

#!/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