Gibt es eine Möglichkeit, den angezeigten Inhalt nach Eingabe durch den Benutzer verschwinden zu lassen?
Nehmen Sie zum Beispiel diese Datei unten
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
Wenn Sie dies ausführen, ist die Ausgabe
how are you ? yHave fun
Ich suche nach etwas, das mich how are you ?
verschwinden lässt, sobald der Benutzer eine Taste drückt
Und dann nach dem Verschwinden drucken Have fun
Ich möchte also, dass nur die letzte Ausgabe des obigen Programms ausgegeben wird
Have fun
Hinweis: Außerdem sollte alles über diesem Skript, was auf dem Shell-Bildschirm gedruckt wird, nicht gelöscht werden.
ich benutze bash
clear
dazwischenecho
ist nicht eine Option?clear
löscht die Ausgabe, die bereits oben auf dem Bildschirm gedruckt wurde, falls vorhanden. @sebasthAre you fine
das? Sollte das nicht seinHow are you
?Antworten:
Sie können verwenden:
(oder
printf '\r'
) um den Cursor an den Zeilenanfang zu bewegen. Gefolgt von:um alles bis zum Ende der Zeile zu löschen. (
tcsh
undzsh
haben auch dasechotc
eingebaute, das Sie mit demtermcap
Äquivalent davon verwenden könnenterminfo
el
:echotc ce
(auchechoti el
inzsh
))quelle
Verwenden Sie einen Wagenrücklauf (
\r
). Dieses Sonderzeichen (ein Überbleibsel aus der Zeit der mechanischen Schreibmaschinen) bewegt den Cursor zurück zum Zeilenanfang. Dann benötigen Sie so viele Leerzeichen wie die Nachricht, die Sie löschen möchten (dies überschreibt die Nachricht), und dann einen zweiten Wagenrücklauf, um zum Anfang zurückzukehren, bevor Sie die nächste Nachricht drucken. Etwas wie das:Wenn Sie das obige Skript ausführen, wird Folgendes gedruckt:
quelle
\r
Sie alle Leerzeichen zwischen\rHave fun
und setzen\n
.Es gibt eine Reihe von Möglichkeiten, von idiotensicher bis elegant.
Die narrensicherste Methode (obwohl die meiste Arbeit) ist die Rücktaste, die wiederholt wird, wie oft sie benötigt wird. Dies funktioniert bei allen außer Teletypen (das Entfernen von Tinte vom Papier ist eine Herausforderung).
Als nächstes ist die Skala Wagenrücklaufräume Wagenrücklauf. Dies funktioniert nicht mit Terminalemulatoren, die vor oder nach jedem Wagenrücklauf einen Zeilenvorschub einfügen (dies ist eine Option, für die Minicom und andere möglicherweise konfiguriert sind).
Dann gibt es die terminalspezifischen Tricks, die ich nur als Termcap-Funktionscodes erwähnen werde, da Termcap- und Terminfo-Datenbanken die Verwendung anzeigen können. (Hier ist eine Liste.)
Einfach für eine einzelne Zeile ist das Verschieben in Spalte (ch), gefolgt von Löschen bis zum Ende der Zeile (ce).
Für kompliziertere Fälle, einschließlich mehrzeiliger Antworten, gibt es die Option zum Speichern der absoluten Position (sc), zur Eingabeaufforderung, zum Lesen der Antwort, zum Wiederherstellen der Cursorposition (rc) und zum Löschen bis zum Ende des Bildschirms (cd).
In den meisten Fällen können Sie die vt100-Werte für die letzten beiden Antworten fest codieren, da die meisten Terminalemulatoren damit kompatibel sind. Natürlich unterstützen nicht alle Terminals diese Optionen, aber diejenigen, die nicht selten und veraltet sind.
quelle