Ich habe ein Skript, mit dem ich zufällige Gedanken protokollieren kann, während ich an einem Projekt arbeite. Im Terminal würde ich durch Ausführen einen neuen Protokolleintrag hinzufügen
$ @ "some random thought"
Wo @
ist nur ein Alias für mein Skript.
Angenommen, mein Terminal befindet sich in diesem Zustand:
$ ls /var/tmp
somefile.ext
another-file.l
$ _
Nach dem Ausführen meines Skripts würde es folgendermaßen aussehen:
$ ls /var/tmp
somefile.ext
another-file.l
$ @ "some random thought"
$ _
Jetzt möchte ich nicht, dass diese Zeile ( $ @ "some random thought"
) auf dem Bildschirm bleibt, nachdem ich sie eingegeben habe. Ich möchte nur, dass das Skript ausgeführt wird und keine Spuren auf dem Bildschirm hinterlassen (einige Dinge sind persönlich und andere sehen möglicherweise mein Terminal). Ich möchte auch nicht clear
den gesamten Bildschirm.
Halten Sie das für möglich? Ich benutze Iterm2, wenn dies hilft.
NB: Ich weiß, wie ich damit umgehen soll history
, damit meine Protokolleinträge nicht aufgezeichnet werden. Ich möchte nur keine Spur auf dem Bildschirm hinterlassen.
Antworten:
Sie können versuchen, die vorherige Zeile zu überschreiben, die bereits beantwortet wurde.
Wie kann man den Inhalt einer Zeile auf dem Terminal ändern, anstatt eine neue zu schreiben?
Zum Beispiel (geändert von der ursprünglichen Antwort):
Wird nur angezeigt:
Als Ausgabe. Durch Hinzufügen weiterer \ 033 [1A-Sequenzen werden mehr Zeilen entfernt.
Vorsichtsmaßnahme : Dies funktioniert nicht auf allen Terminals.
quelle
prompt% echo -n "Old line"; echo -e "\e[0K\r new line"
ich aus dem Terminal verschwinden.tput
keine Terminalanweisungen, daher ist sie über Terminals hinweg portabler. Es funktioniert auch mit mehrzeiliger Ausgabe - aber es bricht ab, wenn die Ausgabe viel scrollt.Anstatt einen Befehl zur Eingabe Ihres Gedankens zu haben, können Sie dafür ein Widget definieren. In
zsh
:Drücken Sie dann Ctrl-T, um den Inhalt des Puffers zu Ihrer
~/.thoughts
Datei hinzuzufügen, und löschen Sie ihn anschließend (BUFFER=
). Dann müssen Sie sich keine Gedanken mehr über das Zitieren machen.Ein anderer Ansatz könnte darin bestehen, interaktive Kommentare zu verwenden:
Auch hier kein Problem mit Zitieren, aber das funktioniert nur für einzeilige Gedanken. (Der
echoti cuu1
sorgt dafür, dass diese Zeile durch Bewegen des Cursors nach oben gelöscht wird.)quelle
print >> ~/.thoughts
war nur ein Beispiel, damit jeder es testen kann.Achtung, dies ist ein schrecklicher, schrecklicher Hack (aber dann ist die gesamte Anfrage ein bisschen ein Hack). :) :)
Hier ist etwas, das auf den meisten Terminals funktioniert , einschließlich des Braindead-MS-DOS-Emulators 'ANSI.SYS'. Funktioniert natürlich nicht an dummen Terminals (aber nichts wird es tun):
Dies ist offensichtlich ein Beispiel. Befreien Sie sich von
echo
undsleep
und ersetzen Sie es durch Ihren Befehl. So funktioniert das:tput sc
speichert die aktuellen Koordinaten des Cursors auf dem Bildschirm,tput rc
Bewegt den Cursor zurück zu den gespeicherten Koordinaten. Möglicherweise wurde der Bildschirm gescrollt, sodass sich das vertrauliche Material in der Zeile über dem gespeicherten befindet. Damit,tput cuu 1
bewegt den Cursor eine Zeile nach oben. (Wenn Sie sich besonders paranoid fühlen, können Sie die Anzahl erhöhen.tput ed
bis zum Ende des Bildschirms gelöscht (dh vom Cursor bis zum Zeilenende und dann vom Cursor bis zum unteren Bildschirmrand).Dies
sc
schlägt komisch fehl, wenn der Bildschirm viel scrollt, weil Sie nichts über das Scrollen wissen, sondern nur die Bildschirmkoordinaten.tput
ist terminalunabhängig, funktioniert also, solange Ihr bestimmtes Terminal in der terminfo-Datenbank aufgeführt und dieTERM
Variable korrekt eingestellt ist.quelle
Nun, wenn es sich nur
some random thought
um einen tatsächlichen Befehl handelt, können Sie dies tun, indem Siespace
vor dem Befehl hinzufügenthought
. Dieser Befehl wird vom Eintritt in die Geschichte ausgeschlossenquelle
satish@Satish:/tmp $ echo "I'm not"
nach dem Ausführen vor dem Terminal ausgeblendet wird .