Existe-t-il un moyen de faire disparaître le contenu affiché juste après que l'utilisateur a saisi?
Par exemple, prenez ce fichier ci-dessous
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
Si vous exécutez cela, la sortie est
how are you ? yHave fun
Je cherche quelque chose qui me permette de how are you ?
disparaître dès que l'utilisateur appuie sur une touche
Et puis après avoir disparu, imprimez Have fun
Donc, je veux que la dernière sortie du programme ci-dessus soit seulement
Have fun
Remarque: En outre, tout élément au-dessus de ce script qui est imprimé sur l'écran du shell ne doit pas être effacé.
j'utilise bash
clear
entre les deuxecho
n'est pas une option?clear
effacera la sortie déjà imprimée ci-dessus à l'écran s'il y en a. @sebasthAre you fine
vient-il? N'est-ce pasHow are you
?Réponses:
Vous pouvez utiliser:
(ou
printf '\r'
) pour déplacer le curseur au début de la ligne. Suivi par:pour tout supprimer jusqu'à la fin de la ligne. (
tcsh
etzsh
aussi avoir la fonctionechotc
intégrée que vous pouvez utiliser avec l'termcap
équivalent de celle-citerminfo
el
:echotc ce
(égalementechoti el
danszsh
))la source
Utilisez un retour chariot (
\r
). Ce caractère spécial (un reste du temps des machines à écrire mécaniques) ramènera le curseur au début de la ligne. Ensuite, vous avez besoin d'autant d'espaces que le message que vous souhaitez supprimer (cela écrasera le message), puis un deuxième retour chariot pour revenir au début avant d'imprimer le message suivant. Quelque chose comme ça:L'exécution du script ci-dessus imprime:
la source
\r
vous pouvez mettre tous les espaces entre\rHave fun
et\n
.Il existe un certain nombre de façons de le faire, allant de la preuve idiote à l'élégant.
La méthode la plus infaillible (bien que la plupart des travaux) est l'espace arrière arrière répété cependant autant de fois nécessaire. Cela fonctionne sur tout sauf les télétypes (retirer l'encre du papier est un défi).
Ensuite, l'échelle est le retour chariot. Cela ne fonctionne pas avec les émulateurs de terminal qui insèrent un saut de ligne avant ou après chaque retour chariot (c'est une option que minicom et d'autres peuvent être configurés pour avoir).
Ensuite, il y a les astuces spécifiques au terminal, je ne mentionnerai que les codes de capacité termcap, car les bases de données termcap et terminfo peuvent montrer l'utilisation. (Voici une liste.)
Simple pour une seule ligne, déplacez-vous vers la colonne (ch), puis effacez jusqu'à la fin de la ligne (ce).
Pour les cas plus compliqués, y compris les réponses sur plusieurs lignes, il y a sauvegarde de la position absolue (sc), invite, lecture de la réponse, restauration de la position du curseur (rc), effacement jusqu'à la fin de l'écran (cd).
Dans la plupart des cas, vous pouvez coder en dur les valeurs vt100 pour les deux dernières réponses car la plupart des émulateurs de terminal sont compatibles avec elle. Bien sûr, tous les terminaux ne prennent pas en charge ces options, mais ceux qui ne le sont pas sont rares et obsolètes.
la source