Sans le savoir, a exécuté une boucle infinie dans le terminal

9

J'ai copié le code ci-dessous d'une source aléatoire sur mon terminal et j'ai exécuté:

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

Le code consiste à afficher une horloge en cours d'exécution dans le coin supérieur droit du terminal. L'extrait a très bien fonctionné et a fait exactement ce que je voulais, mais maintenant je veux juste terminer cette boucle et me débarrasser de l'horloge.

Aussi, j'ai besoin de comprendre le code ci-dessus. J'ai une idée, car je sais ce que fait la tputcommande, mais il y a encore beaucoup de points que je ne peux pas connecter.

Kartik Chauhan
la source
1
Vous pouvez exécuter jobsvotre session pour répertorier les travaux d'arrière-plan actifs, puis les mettre au premier plan en tapant fg <job number>. Après avoir tapé Ctrl + C pour arrêter cette boucle infinie. Ce scénario fonctionne uniquement dans un terminal qui exécute l'extrait.
Yurij Goncharuk
Merci beaucoup, une façon très propre de se débarrasser de la boucle. Cela devrait devenir la réponse acceptée.
Kartik Chauhan
Je vous en prie! Je l'ai mis comme réponse ci-dessous.
Yurij Goncharuk
1
Notez que la simple fermeture de la fenêtre du terminal mettra également fin à tous les travaux en cours qui lui sont attachés.
trlkly
Vous avez deux questions ici. Pouvez-vous diviser le 2e, à une nouvelle question.
ctrl-alt-delor

Réponses:

15

Vous pouvez exécuter une jobscommande dans votre session pour répertorier les travaux d'arrière-plan actifs, puis les mettre au premier plan en tapant fg <job number>. Tapez ensuite Ctrl+ Cpour arrêter cette boucle infinie.

Ce scénario fonctionne uniquement dans un terminal qui exécute l'extrait.


Explication:

tput sc - enregistrer la position du curseur.

tput cup 0 $(($(tput cols)-29))- déplacer le curseur sur la position 0de l'axe Y et (count of screen columns minus 29)de l'axe X.

date - il suffit d'imprimer la date actuelle.

tput rc - restaurer la position du curseur.

while sleep 1; ... do ... ; done - boucle avec retard de 1 seconde.

Tapez help whilepour en savoir plus sur la whileboucle dans le shell et suivez pour man 1 tput ou tldp tput doc pour savoir comment fonctionne tput.

Yurij Goncharuk
la source
J'aimerais toujours savoir comment le code a fait ce qu'il a fait.
Kartik Chauhan
@KartikChauhan J'ai aussi mis quelques explications.
Yurij Goncharuk
@KartikChauhan Vous avez raison! Merci! Je viens de corriger ça.
Yurij Goncharuk
3
kill %1(ou un nombre différent s'il y a plusieurs emplois) est une alternative à fg+Ctrl-C
Roman Odaisky