2017-08-04 1 views
0

Je souhaite que stdout s'affiche sur une seule ligne. Chaque ligne successive devrait remplacer la dernière.Introduire des codes ANSI dans un flux

En règle générale, je ne

echo -ne "Overwrite me. \033[0K\r" 

Mais maintenant, je veux redirigez la sortie, et étant donné que l'écho n'est pas un filtre que je dois utiliser sed ou quelque chose par exemple

cat story.txt | some.sed.like.util.for.replacing.$.with.\033[0K\r 
+0

double possible de [? Comment supprimer et remplacer la dernière ligne dans le terminal en utilisant bash] (https://stackoverflow.com/questions/2388090/how- to-delete-and-replace-last-line-in-the-terminal-using-bash) – hek2mgl

Répondre

1

sed ne peut pas être utilisé car sed toujours ajouter une nouvelle ligne à sa sortie. Vous devez utiliser une boucle while dans la coquille:

while read -r line ; do 
    echo -en "\r\033[0K${line}" 
    sleep 1 
done < story.txt 
+1

'echo -en" \ r \ 033 [0K $ {line} "' - sinon la ligne la plus longue est toujours affichée "sous" la ligne actuelle. – gboffi

+0

@gboffi Bon point! Merci – hek2mgl