Unbewusst lief eine Endlosschleife im Terminal

9

Ich habe den folgenden Code von einer zufälligen Quelle auf mein Terminal kopiert und ausgeführt:

while sleep 1;
  do tput sc;
  tput cup 0 $(($(tput cols)-29));
  date;
  tput rc;
done &

Der Code soll eine laufende Uhr in der oberen rechten Ecke des Terminals anzeigen. Das Snippet hat sehr gut funktioniert und genau das getan, was ich wollte, aber jetzt möchte ich nur diese Schleife beenden und die Uhr loswerden.

Außerdem muss ich den obigen Code verstehen. Ich habe eine Idee, da ich weiß, was der tputBefehl bewirkt, aber es gibt immer noch viele Punkte, die ich nicht verbinden kann.

Kartik Chauhan
quelle
1
Sie können jobsIhre Sitzung ausführen, um aktive Hintergrundjobs aufzulisten, und sie dann durch Eingabe in den Vordergrund stellen fg <job number>. Geben Sie nach Strg + C diese Endlosschleife ein. Dieses Szenario funktioniert nur in Terminals, auf denen Snippet ausgeführt wird.
Yurij Goncharuk
Vielen Dank, eine sehr saubere Art, die Schleife loszuwerden. Dies sollte die akzeptierte Antwort werden.
Kartik Chauhan
Bitte schön! Ich habe es als Antwort unten angegeben.
Yurij Goncharuk
1
Beachten Sie, dass durch einfaches Schließen des Terminalfensters auch alle damit verbundenen laufenden Jobs beendet werden.
trlkly
Sie haben hier zwei Fragen. Können Sie die 2. auf eine neue Frage aufteilen?
Strg-Alt-Delor

Antworten:

15

Sie können jobsin Ihrer Sitzung einen Befehl ausführen, um aktive Hintergrundjobs aufzulisten und sie dann durch Eingabe in den Vordergrund zu stellen fg <job number>. Geben Sie dann Ctrl+ ein C, um diese Endlosschleife zu stoppen.

Dieses Szenario funktioniert nur in Terminals, auf denen Snippet ausgeführt wird.


Erläuterung:

tput sc - Cursorposition speichern.

tput cup 0 $(($(tput cols)-29))- Bewegen Sie den Cursor auf die Position 0der Y-Achse und (count of screen columns minus 29)der X-Achse.

date - Drucken Sie einfach das aktuelle Datum aus.

tput rc - Cursorposition wiederherstellen.

while sleep 1; ... do ... ; done - Schleife mit einer Verzögerung von 1 Sekunde.

Geben Sie help whilemehr darüber zu wissen , whileSchleife in der Schale und folgen Mann 1 tput oder TLDP tput doc zu wissen , wie tput funktioniert.

Yurij Goncharuk
quelle
Ich würde immer noch gerne wissen, wie der Code das getan hat, was er getan hat.
Kartik Chauhan
@ KartikChauhan Ich habe auch eine Erklärung gegeben.
Yurij Goncharuk
@ KartikChauhan Du hast recht! Vielen Dank! Ich habe das gerade behoben.
Yurij Goncharuk
3
kill %1(oder eine andere Nummer, wenn es mehrere Jobs gibt) ist eine Alternative zu fg+Ctrl-C
Roman Odaisky