Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Programmer un retour arrière dans un shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Programmer un retour arrière dans un shell
    Bonjour,
    Lorsqu'on fait
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    echo -e "reprise de script\n"

    il y aura un retour charriot après l'affichage de "reprise de script"
    Que pourrais-je mettre entre " et reprise, afin de supprimer un retour chariot qu'il y a eu sur la ligne d'avant, c'est-à-dire pour faire remonter mon affichage d'une ligne, bref, un retour arrière en fait ?
    Et est-ce que ce genre de caractère, tout comme \n, à un nom ?
    D'avance merci

  2. #2
    Membre éclairé
    \n n'est pas un retour charriot, c'est un saut de ligne.
    Le retour charriot, c'est \r.
    Et le retour en arrière que tu cherches, c'est \b.
    Cf. help echo, et tu peux jeter un œil à ça aussi : https://fr.wikipedia.org/wiki/Americ...C3%A8res_ASCII

  3. #3
    Membre à l'essai
    Génial, merci
    mais \n et \r, c'est pareil, ca donne le même résultat, non ?

  4. #4
    Membre à l'essai
    le -e c'est pour \n, mais apparemment pas pour \b qui ne marche pas ?

  5. #5
    Membre éclairé
    Prends le temps de lire la documentation et de faire quelques essais, tu verras que \r et \n ont des effets différents, et que \b marche très bien.
    Sur ce, bonne nuit !

  6. #6
    Modérateur

    Citation Envoyé par help echo
    \b backspace
    pour faire ce que tu veux
    Citation Envoyé par BEEP-BEEP
    faire remonter mon affichage d'une ligne
    il faut aller plus loin :
    • déplacer le curseur au début de la ligne précédente
    • nettoyer la ligne entière
    • afficher le nouveau texte
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  7. #7
    Expert éminent sénior
    Bonjour

    C'est trop tard ! Quand tu as envoyé "\n" dans le flux, il n'y a pas de retour en arrière possible. La bonne méthode est de modifier la commande précédente pour qu'elle ne fasse pas ce "\n". Si tu ne peux pas, il te reste les méthodes expliquées par balkany et N_BaH, que le destinataire (console ou autre) n'est pas obligé de considérer. La méthode de rattrapage peut essayer de jouer sur le contenu (le texte) ou le contenant (la console).
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Membre à l'essai
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    C'est trop tard ! Quand tu as envoyé "\n" dans le flux, il n'y a pas de retour en arrière possible. La bonne méthode est de modifier la commande précédente pour qu'elle ne fasse pas ce "\n". Si tu ne peux pas, il te reste les méthodes expliquées par balkany et N_BaH, que le destinataire (console ou autre) n'est pas obligé de considérer. La méthode de rattrapage peut essayer de jouer sur le contenu (le texte) ou le contenant (la console).
    Merci pour vos commentaires.
    Mais je n'y arrive pas.
    Par exemple :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #*!/usr/bin/env bash
    echo "Appuyer la touche <Entrée> pour continuer..."
    read touche
    case $touche in
    *)	echo -e "Reprise du script...\n"
    	;;
    esac


    donne à l'affichage :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    toto@ma_machine:~$ ./pause.sh
    Appuyer la touche <Entrée> pour continuer...
     
    Reprise du script...


    Donc, je n'arrive pas à supprimer la ligne entre Appuyer...et Reprise malgrès tous mes essais avec notamment \b

  9. #9
    Modérateur

    c'est plus simple que ta première explication laissait supposer.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    echo "blah"
    read -sn 1 touche # une seule touche + pas d'affichage
    echo 'reprise'
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  10. #10
    Expert éminent sénior
    AVANT
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    for ((q=1;q<20;q++));do for ((i=0;i<$q;i++)); do echo -n "#";done; echo "";if [ $((q%10)) -eq 0 ];then echo -n "Appuyer la touche <Entrée> pour continuer... ";read -sn1;echo -ne "\r                                                        \r";fi;done

    (en une ligne puis déplié)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for ((q=1;q<20;q++))
    do 
        for ((i=0;i<$q;i++))
        do 
            echo -n "#"
        done
        echo ""
        if [ $((q%10)) -eq 0 ]
        then 
            echo -n "Appuyer la touche <Entrée> pour continuer... "
            read -sn1
            echo -ne "\r                                                        \r"
        fi
    done


    PENDANT
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ for ((q=1;q<20;q++));do for ((i=0;i<$q;i++)); do echo -n "#";done; echo "";if [ $((q%10)) -eq 0 ];then echo -n "Appuyer la touche <Entrée> pour continuer... ";read -sn1;echo -ne "\r                                                        \r";fi;done
    #
    ##
    ###
    ####
    #####
    ######
    #######
    ########
    #########
    ##########
    Appuyer la touche <Entrée> pour continuer...


    APRÈS
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $ for ((q=1;q<20;q++));do for ((i=0;i<$q;i++)); do echo -n "#";done; echo "";if [ $((q%10)) -eq 0 ];then echo -n "Appuyer la touche <Entrée> pour continuer... ";read -sn1;echo -ne "\r                                                        \r";fi;done
    #
    ##
    ###
    ####
    #####
    ######
    #######
    ########
    #########
    ##########
    ###########                                 
    ############
    #############
    ##############
    ###############
    ################
    #################
    ##################
    ###################


    Désolé pour la répétition, mais au moins, c'est clair.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Membre à l'essai
    Impec. Merci à tous les deux ;-)

###raw>template_hook.ano_emploi###