Aligner avec printf [Résolu]

Messages postés
99
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
26 juin 2019
-
Bonjour,

j'ai une fonction "reponse" qui renvoie OK ou KO en fonction du code retour d'une commande:
function reponse
{
if [ "$?" -eq 0 ]
then
   printf "\033[1;32;40mOK\033[0m\n"
else
   printf "\033[1;31;40mKO\033[0m\n"
   echo -en "\033[0mContinue ? Y/N : "
   read answer
  case ${answer:0:1} in
    y|Y )
    true ;;


*) exit ;;
  esac
fi
}


puis

echo -en "test de la commande :"
<Ma commande>...
reponse


==> j'obtiens
test de la commande : OK ou KO


J'ai plusieurs commandes à tester et j'aimerais que tous les OK soient aligner.

test de la commande machintruc1 : ............................OK
test de la commande bidule..........................................OK
test de la commande de bidultrucmachinchouette ...OK

Je sais que printf permet de la faire mais je n'arrive pas trouver la bonne syntaxe.

Merci de votre aide.
@+
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
212
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
17 septembre 2019
13
2
Merci
salut,

passe le texte à la variable, puis
printf '%-50s %s\n' "$texte" OK

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 60022 internautes nous ont dit merci ce mois-ci

bob737
Messages postés
99
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
26 juin 2019
-
Bonjour,

merci, c'est presque ça.
Pour plus de lisibilité, j'aimerais garder les .... avant le OK ou KO et donc remplacer les blancs par des "."
un idée? :-)

De plus, l'idéal serait que comme le shell d'origine, le texte soit affiché AVANT le résultat OK ou KO.
Commenter la réponse de lEprofSonDkon
Messages postés
17823
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 septembre 2019
4453
1
Merci
autre méthode
$ cat code
#!/bin/bash
t1="test de la commande machintruc1 :"
t2="test de la commande bidule :"
t3="test de la commande bidultrucmachinchouette :"
status="OK"
printf -v x "%.0s." {1..50}; printf "%s%s%s\n" "$t1" ${x:${#t1}} $status
status="KO"
printf -v x "%.0s." {1..50}; printf "%s%s%s\n" "$t2" ${x:${#t2}} $status
status="OK"
printf -v x "%.0s." {1..50}; printf "%s%s%s\n" "$t3" ${x:${#t3}} $status
$
$ ./code
test de la commande machintruc1 :.................OK
test de la commande bidule :......................KO
test de la commande bidultrucmachinchouette :.....OK
Commenter la réponse de dubcek
Messages postés
212
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
17 septembre 2019
13
0
Merci
$ texte="test de la commande pouicpouic"; echo -en "$texte"; printf '.%0.s' $(seq 1 $((50-${#texte}))); printf '%s\n' OK
test de la commande pouicpouic....................OK
$ texte="test de la commande milk"; echo -en "$texte"; printf '.%0.s' $(seq 1 $((50-${#texte}))); printf '%s\n' OK
test de la commande milk..........................OK

je ne saurais pas expliquer
'%0.s'
. si quelqu'un sait...

pour l'emploi de
seq
, par contre, c'est parce qu'il n'y a pas de développements de variables dans un Développement d'accolades.
Commenter la réponse de lEprofSonDkon
Messages postés
17823
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 septembre 2019
4453
0
Merci
hello
code simple, mais pas recommandé de le rediriger dans un fichier
$ cat code
t1="test de la commande machintruc1 :"
t2="test de la commande bidule :"
t3="test de la commande bidultrucmachinchouette :"
status="OK"
printf "%.0s." {1..50}; printf "%s\r%s\n" $status "$t1"
status="KO"
printf "%.0s." {1..50}; printf "%s\r%s\n" $status "$t2"
status="OK"
printf "%.0s." {1..50}; printf "%s\r%s\n" $status "$t3"
$ ./code
test de la commande machintruc1 :.................OK
test de la commande bidule :......................KO
test de la commande bidultrucmachinchouette :.....OK


je ne saurais pas expliquer '%0.s'. si quelqu'un sait...
http://manpagesfr.free.fr/man/man3/printf.3.html
Une précision éventuelle, sous la forme d'un point (« . ») suivi par un nombre. ..... le nombre maximum de caractères à imprimer depuis une chaîne pour les conversions s et S.
printf va s'exécuter N fois sans afficher les paramètres mais en affichant le texte hors format
$ printf " hello%.0s world" {1..5}; echo
hello world hello world hello world hello world hello world
lEprofSonDkon
Messages postés
212
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
17 septembre 2019
13 -
d'accord, merci.

petite précision. c'est plutôt dans l'autre sens :
printf
va s'exécuter autant de fois qu'il y a d'arguments, sans les afficher, mais en affichant les indications de format (le texte dans le format)

non ?
dubcek
Messages postés
17823
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 septembre 2019
4453 -
oui, par hors format, je voulais dire ce qui n'est pas précédé d'un % dans la chaine entre "
Commenter la réponse de dubcek
Messages postés
99
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
26 juin 2019
0
Merci
Bonjour,

Merci pour votre réponse. CE code est presque ce que je souhaite mais sauf incompréhension de ma part, il y a un point que ne convient pas à je que je souhaite faire.

ici, la réponse est donnée APRES l'exécution de la commande. De mon côté j'aimerais que l'utilisateur voit le temps d'exécution de sa requête soit chronologiquement:

test de la commande machintruc1 : ....................
lancement la commande
récupération du statut OK ou KO

enfin:
test de la commande machintruc1 : .................... OK ou KO
dubcek
Messages postés
17823
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 septembre 2019
4453 -
essayer
$ t2="test de la commande bidule :"
$ printf -v x "%.0s." {1..50}; printf "%s%s" "$t2" ${x:${#t2}}; sleep 4; tput bel; echo OK
test de la commande bidule :......................OK
bob737
Messages postés
99
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
26 juin 2019
> dubcek
Messages postés
17823
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 septembre 2019
-
Bien vu :-) mais ma commande est une requête API dont le temps d'exécution est très aléatoire. Je ne peux pas lui fixer un durée.
dubcek
Messages postés
17823
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 septembre 2019
4453 -
le sleep c'est juste comme exemple
$ printf -v x "%.0s." {1..50}; printf "%s%s" "$t2" ${x:${#t2}}; ta_commande && echo OK || echo KO
bob737
Messages postés
99
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
26 juin 2019
-
Nickel. Merci.
Commenter la réponse de bob737