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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.