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 12/02/2015, à 21: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 smile

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, à 22: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, à 01:40)


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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, à 02: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 smile


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, à 09: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, à 09: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, à 10: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... smile

Hors ligne

#7 Le 13/02/2015, à 12: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, à 23: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 wink
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 wink

@tiramiseb > Ça faisait longtemps que je n'étais pas venu ici, ça fait plaisir de voir un nom familier big_smile

FélixP aka Salamandar

Dernière modification par FelixP (Le 18/02/2015, à 23: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