#1 Le 12/02/2015, à 20:48
- FelixP
Obtenir le nombre de caractères restants dans la ligne du terminal
Salut !
Développant un p'tit script Bash, j'ai besoin d'afficher des "étapes" avec des "ok" à la fin de la ligne.
Je veux donc avoir quelque chose qui ressemble à ça :
Un message de progression ✔
Un autre message de progression qui échoue ✘
Enfin, un dernier message de progression ✔
J'affiche le message de progression avec
echo -n "mon message de progression"
# Il me faut savoir combien d'espaces mettre
echo "✔"
Savez-vous comment avoir cette information ?
Merci
Félix
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#2 Le 12/02/2015, à 21:49
- Arbiel
Re : Obtenir le nombre de caractères restants dans la ligne du terminal
Bonsoir
Je n'ai pas la formule en tête, mais tu peux faire quelque chose comme
1) initialiser ton message
2) lui adjoindre un nombre conséquent de " "
3) tronquer l'ensemble à la longueur voulue
4) lui adjoindre la coche ou le x
Arbiel
Edit
Voila un script qui fait ce que tu souhaites
tampon () {
local lg_msg="${1}"
local carac="${2}"
for (( ; $((${lg_msg})) ; )) ; do echo -n "${carac}" ; lg_msg=$((${lg_msg}-1)) ; done ;
}
echo_msg () {
local msg="${1}"
local bourrage="${2}"
local marque="${3}"
echo "${msg:0:${#bourrage}}${bourrage:${#msg}:${#bourrage}-${#msg}}${marque}" ;
}
esp=$(tampon 20 " ")
# lignes de test
echo_msg "Première ligne" "${esp}" "?"
echo_msg "Seconde ligne" "${esp}" "!"
echo_msg "Ligne beaucoup trop longue" "${esp}" "x"
Dernière modification par Arbiel (Le 13/02/2015, à 00:40)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#3 Le 13/02/2015, à 01:10
- FelixP
Re : Obtenir le nombre de caractères restants dans la ligne du terminal
Merci beaucoup ! Ça a l'air de me convenir. Je te dis quand j'ai implémenté tout ça
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne
#4 Le 13/02/2015, à 08:12
- credenhill
Re : Obtenir le nombre de caractères restants dans la ligne du terminal
hello
formatter le texte avec printf
$ for t in hello "hello world" "hello le monde"; do printf "%-20s%c\n" "$t" X; done
hello X
hello world X
hello le monde X
Hors ligne
#5 Le 13/02/2015, à 08:32
- pingouinux
Re : Obtenir le nombre de caractères restants dans la ligne du terminal
Bonjour,
Autre façon de faire (marche aussi avec les chaînes contenant des caractères accentués)
mon_print() { printf "%s%*s %s\n" "$1" $(($2-$(wc -m <<<"$1")+1)) "" "$3"; }
mon_print "Un message de progression" 50 ✔
mon_print "Un autre message de progression qui échoue" 50 ✘
Hors ligne
#6 Le 13/02/2015, à 09:45
- tiramiseb
Re : Obtenir le nombre de caractères restants dans la ligne du terminal
Salut,
Je me range du côté de credenhill et pingouinux : printf est fait pour ça.
En fait le script d'Arbiel est une réimplémentation partielle d'une petite partie de ce que fait printf...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#7 Le 13/02/2015, à 11:44
- Qedinux
Re : Obtenir le nombre de caractères restants dans la ligne du terminal
Un code que j'avais écrit il y a quelques temps pour aligner à droite ou à gauche en fonction de la largeur d'un champ :
function fmtString()
{
local result=""
# Verify if $2 is a number
if [[ "$2" =~ ^[0-9]+$ ]]
then
length=$2
else
# Not a number
length=16
fi
# Verify if $4 is a char
if [ ".$4" == "." ]
then
fillingChar=" "
else
fillingChar=$4
fi
# Prepare the filling string
filling=""
while [ ${#filling} -lt $length ]
do
filling="$filling$fillingChar"
done
# Text alignment
# 0: Text is align on the right (default)
# 1: Text is align on the left
if [ "$3" == "1" ]
then
align=1
else
align=0
fi
if [ $align -eq 1 ]
then
result="$1$filling"
result=${result:0:length}
else
result="$filling$1"
result=${result:(-length)}
fi
echo $result
}
Dans ton cas, il y aurait un premier champ d'une certaine largeur aligné à gauche contenant l'étape de progression et un second champ d'une largeur plus petite aligné à droite (ou à gauche) contenant le résultat.
Bien à toi.
Hors ligne
#8 Le 18/02/2015, à 22:39
- FelixP
Re : Obtenir le nombre de caractères restants dans la ligne du terminal
Salut les gens,
J'ai enfin pu me pencher sur mon script.
Après quelques tests j'ai opté pour ça :
message() {
printf "%-60s" "$1 "
}
L'espace après $1 permet d'avoir un espace au cas où mon message est trop long
J'affiche le "ok" par la suite :
message "Rebooting the device…"
$adb reboot
if [[ $? == 0 ]]; then echo "✔"; else echo "✘"; fi
Merci à vous cela me convient farpaitement
@tiramiseb > Ça faisait longtemps que je n'étais pas venu ici, ça fait plaisir de voir un nom familier
FélixP aka Salamandar
Dernière modification par FelixP (Le 18/02/2015, à 22:40)
Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp
Hors ligne