Je sais que je pourrais supprimer les trois derniers caractères avec:
echo -ne '\b\b\b'
Mais comment puis-je supprimer une ligne complète? Je veux dire que je ne veux pas utiliser:
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
... etc ... pour supprimer une longue ligne.
command-line
echo
LanceBaynes
la source
la source
echo -ne "\033[2K" ; printf "\r"
:, la ligne est comme neuve, comme si elle n’avait jamais été écrite auparavant.echo -ne "\e[2K\r"
. Mais ANSI échappe à FTW, néanmoins.Réponses:
Vous pouvez utiliser
\b
ou\r
pour déplacer le curseur en arrière puis écraser le caractère imprimé avec un nouveau caractère. Notez que ni\b
ni\r
supprime les caractères imprimés. Cela déplace simplement le curseur en arrière.\b
recule le curseur d'un caractère et le\r
déplace au début de la ligne.Exemple: les deux
et
imprimera:
Si vous souhaitez supprimer les caractères, vous devez utiliser la solution de contournement suivante:
sortie:
Extrait de
man echo
:la source
echo -e 'fooooooooo\rbar
fait écho à barooooooo.echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
échos aussibaroo
.printf
.Vous recherchez des évasions terminales . En particulier, pour effacer de la position du curseur au début de la ligne:
Ou tout ce qui est sur la ligne, quelle que soit la position du curseur:
Et vous pouvez faire toutes sortes d'autres astuces avec les évasions de terminal aussi.
la source
-e
commeecho
argument n'est pas compatible POSIX + je n'aime pas les séquences d'échappement. Préférezprintf
output
.-e
paramètre pour qu'ilecho
ne soit pas conforme à POSIX mais quand même ...Si vous souhaitez effacer la ligne, je vous suggère d'utiliser une combinaison du retour de chariot mentionné par les personnes et de terminfo.
Cela va écrire
xyzzyxyzzy
, puis retourner au début de la ligne et envoyer la séquence "effacer jusqu'à la fin de la ligne" au terminal, puis écrirefoobar
. Le-n
fait echo pas ajouter une nouvelle ligne après lefoobar
.la source
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
pour la portabilité et d'éviter d' avoir le contenu de$ceol
passer par l'\x
expansion.Vous demandez explicitement
echo
, mais cette demande vous bloque. Voici une approche qui utilise laprintf
commande intégrée de bash avec le développement d'accolade:la source
Voici un exemple utilisant les options sans retour à la ligne
-n
et retour chariot d' echo\r
.la source
Au lieu de cela,
echo -en "\r"
vous pouvez également trouver laprintf "\r"
commande utile. De cette façon, vous pouvez formater la chaîne. par exemple:Je le fais aussi généralement lorsque je travaille avec une analyse de fichier lente pour afficher le nom du fichier en cours de création sans créer de liste.
la source
Comme question est supprimer la ligne complète
J'ai utilisé la commande ci-dessous avec la combinaison de
echo
etsed
supprimer la ligneAprès exécution de la commande, le résultat sera vide. Puisque la ligne sera remplacée par aucune
commander
la source
Voici un exemple de compte à rebours que j'utilise:
la source