Ich weiß, dass ich die letzten drei Zeichen löschen konnte mit:
echo -ne '\b\b\b'
Aber wie kann ich eine ganze Zeile löschen? Ich meine, ich möchte nicht verwenden:
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 ... um eine lange Zeile zu löschen.
command-line
echo
LanceBaynes
quelle
quelle
echo -ne "\033[2K" ; printf "\r"
Jetzt ist die Zeile so gut wie neu, als wäre sie noch nie geschrieben worden.echo -ne "\e[2K\r"
. Aber trotzdem ANSI-Escape-Sequenzen FTW.Antworten:
Mit
\b
oder können Sie\r
den Cursor zurückbewegen und dann das gedruckte Zeichen mit einem neuen Zeichen überschreiben. Beachten Sie, dass die gedruckten Zeichen weder gelöscht\b
noch\r
gelöscht werden. Es bewegt nur den Cursor zurück.\b
Bewegt den Cursor um ein Zeichen zurück und\r
bewegt ihn an den Zeilenanfang.Beispiel: beide
und
wird drucken:
Wenn Sie die Zeichen löschen möchten, müssen Sie die folgende Problemumgehung verwenden:
Ausgabe:
Auszug aus
man echo
:quelle
echo -e 'fooooooooo\rbar
hallt nach barooooooo.echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
auch Echosbaroo
.printf
.Sie suchen nach terminalen Fluchten . Um insbesondere von der Cursorposition zum Zeilenanfang zu gelangen, gehen Sie wie folgt vor:
Oder alles in der Zeile, unabhängig von der Cursorposition:
Und Sie können alle möglichen anderen netten Tricks auch mit terminalen Fluchten ausführen.
quelle
-e
Alsecho
Argument ist es nicht POSIX-konform. + Ich mag die Escape-Sequenzen nicht. Entweder lieberprintf
odertput
.-e
Parameter fürecho
nicht konform ist POSIX aber immer noch ...Wenn Sie die Zeile löschen möchten, dann schlage ich vor, dass Sie eine Kombination aus den von den Personen erwähnten Zeilenumbrüchen und den Endungen verwenden.
Dies schreibt
xyzzyxyzzy
, kehrt dann zum Zeilenanfang zurück und sendet die Sequenz "Löschen bis Zeilenende" an das Terminal und schreibt dannfoobar
. Das-n
Markenecho fügt nach dem keine neue Zeile hinzufoobar
.quelle
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
für die Portabilität und zu vermeiden , den Inhalt mit$ceol
durchgehender\x
Expansion.Sie fragen ausdrücklich nach
echo
, aber diese Anfrage bringt Sie auf den Punkt. Hier ist ein Ansatz, der bashs eingebautenprintf
Befehl mit Klammererweiterung verwendet :quelle
Hier ist ein Beispiel für die Verwendung der Optionen no newline
-n
und carriage return von echo\r
.quelle
Stattdessen
echo -en "\r"
könnten Sie denprintf "\r"
Befehl auch als nützlich empfinden. Auf diese Weise können Sie die Zeichenfolge formatieren. z.B:Normalerweise mache ich das auch, wenn ich mit langsamer Dateianalyse arbeite, um den Dateinamen anzuzeigen, der gerade ausgeführt wird, ohne eine Liste zu erstellen
quelle
Als Frage ist die ganze Zeile zu löschen
Ich habe den folgenden Befehl mit Kombination von
echo
undsed
zum Löschen von Zeilen verwendetNach der Ausführung des Befehls ist das Ergebnis leer, da die Zeile durch keines ersetzt wird
Befehl
quelle
Hier ist ein Beispiel für einen Countdown-Timer:
quelle