Supprimer le retour à la ligne après read

Laverda32 -  
dubcek Messages postés 18627 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
Configuration: Windows 2000
Internet Explorer 6.0

7 réponses

  1. 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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  3. 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
    1. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    et avec
    tput cursor_up
    le curseur remonte d'une ligne ?
    0
  8. 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