Supprimer le retour à la ligne après read

Laverda32 -  
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je souhaite lire une variable, l'afficher à l'écran, faire un traitement de cette variable et afficher le résultat TOUT CA SUR LA MEME LIGNE. Le problème est que pour valider l'entrée de la variable dans le read, je dois taper sur "entree" et que ça déclenche un passage à la ligne suivante. Comment éviter ce passage à la ligne?

Merci,

Sergio

7 réponses

EminoMeneko Messages postés 2499 Statut Membre 318
 
Je crois que c'est echo avec l'option -e ou -n qui empêche le retour à la ligne.
La touche entrée ne fait pas à proprement parler un saut de ligne dans ce cas ; c'est juste que les commandes echo font un retour à la ligne par défaut.

Si tu pouvais nous illustrer ton problème avec quelques lignes de code je pense qu'on pourrait être plus clair mais je pense d'expérience que ton problème se situe là. :)
1
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Regarde du côté de la commande "tput" (man tput) :
#!/bin/ksh

clear

tput cup 0 2
echo 1 |awk '{printf "valeur %3d ? ",$1}'
read -r x
y=`expr $x + 1`
tput cup 0 16
echo " --> "$y
Voir aussi dans la FAQ : La commande tput

;-))
0
Laverda32
 
Ah, je crois qu'on approche. Si je comprends bien, tput cup a b me positionne le curseur à la ligne a colonne b. C'est presque bon, sauf que je veux écrire la réponse sur la ligne où je me trouve et que je ne connais pas son numéro. Y a-t'il moyen de récupérer quelque part les coordonnées courantes du curseur?

Merci,

Sergio.
0
antoine
 
dans les variables d'environnement il y LINES et COLUMNS de valorisé dynamiquement (redimensionne kconsole pour le vérifier) , cela peut il aider ?
Antoine
0
Laverda32
 
Merci pour votre aide à tous. En fait, je m'en sors en faisant un clear en début de code pour etre sûr de commencer à la ligne zéro et ça marche bien sauf qu'arrivé en bas de la fenêtre, j'ai une ligne blanche qui s'insère à chaque fois. Voici le code :

#!/bin/ksh
clear
Colonne=50
Ligne=0
while [ 0 -eq 0 ];do
echo $Ligne|awk '{printf "valeur %3d ? ",$1}'
read x
y=`expr $x + 1`
tput cup $Ligne $Colonne
echo " --> "$y
Ligne=`expr $Ligne + 1`
done

et voici le résultat obtenu en entrant 0 à chaque fois (les lignes de "====" représentent le haut et le bas de ma fenetre) :

=======================================================================
valeur 4 ? 0 --> 1
valeur 5 ? 0 --> 1
valeur 6 ? 0 --> 1
valeur 7 ? 0 --> 1
valeur 8 ? 0 --> 1
valeur 9 ? 0 --> 1
valeur 10 ? 0 --> 1
valeur 11 ? 0 --> 1
valeur 12 ? 0 --> 1
valeur 13 ? 0 --> 1
valeur 14 ? 0 --> 1
valeur 15 ? 0
--> 1
valeur 16 ? 0
--> 1
valeur 17 ?
=======================================================================

C'est pas très joli... Quelqu'un a la solution pour supprimer cette ligne blanche?

Merci,

Sergio.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Laverda32
 
Manifestement, le copier-coller n'est pas au point : il a fait sauter l'indentation dans le code et la ligne blanche dans le résultat. Il fallait lire :

#!/bin/ksh
clear
Colonne=50
Ligne=0
while [ 0 -eq 0 ];do
echo $Ligne|awk '{printf "valeur %3d ? ",$1}'
read x
y=`expr $x + 1`
tput cup $Ligne $Colonne
echo " --> "$y
Ligne=`expr $Ligne + 1`
done

et

=======================================================================
valeur 4 ? 0 --> 1
valeur 5 ? 0 --> 1
valeur 6 ? 0 --> 1
valeur 7 ? 0 --> 1
valeur 8 ? 0 --> 1
valeur 9 ? 0 --> 1
valeur 10 ? 0 --> 1
valeur 11 ? 0 --> 1
valeur 12 ? 0 --> 1
valeur 13 ? 0 --> 1
valeur 14 ? 0 --> 1
valeur 15 ? 0 --> 1

valeur 16 ? 0 --> 1

valeur 17 ?
=======================================================================
Désolé,

Sergio.
0
dubcek Messages postés 19032 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
et avec
tput cursor_up
le curseur remonte d'une ligne ?
0
Laverda32
 
Merci pour ta réponse, mais je me suis mal fait comprendre. Le retour à la ligne après le echo, je maitrise : comme l'option -n ne marche pas, je fais un printf avec awk sans mettre \n (bon, il y a peut être plus simple...). Mon problème ne vient donc pas de l'echo mais du read : pour que la réponse soit prise en compte, il faut taper return, et c'est ce return qui déclenche le saut de ligne que je voudrais éviter.

Voici un exemple :

#!/bin/ksh
echo 1|awk '{printf "valeur %3d ? ",$1}'
read x
y=`expr $x + 1`
echo " --> "$y

je voudrais que tout s'écrive sur la même ligne, même le $y.

Merci de ton aide,

Sergio.
-1