Nieświadomie uruchomił nieskończoną pętlę w terminalu

9

Skopiowałem poniższy kod z losowego źródła do mojego terminala i uruchomiłem:

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

Kod ma pokazywać bieżący zegar w prawym górnym rogu terminala. Fragment działał bardzo dobrze i działał dokładnie tak, jak chciałem, ale teraz chcę po prostu zakończyć tę pętlę i pozbyć się zegara.

Ponadto muszę zrozumieć powyższy kod. Mam pewien pomysł, ponieważ wiem, co tputrobi polecenie, ale wciąż jest wiele kropek, których nie jestem w stanie połączyć.

Kartik Chauhan
źródło
1
Możesz uruchomić jobssesję, aby wyświetlić listę aktywnych zadań w tle, a następnie umieścić je na pierwszym planie, wpisując fg <job number>. Po wciśnięciu Ctrl + C, aby zatrzymać tę nieskończoną pętlę. Ten scenariusz działa tylko w terminalu z uruchomionym fragmentem kodu.
Yurij Goncharuk
Dziękuję bardzo, bardzo czysty sposób na pozbycie się pętli. To powinno stać się przyjętą odpowiedzią.
Kartik Chauhan
Zapraszamy! Podaję to jako odpowiedź poniżej.
Yurij Goncharuk
1
Pamiętaj, że samo zamknięcie okna terminala spowoduje także zakończenie wszystkich uruchomionych zadań do niego dołączonych.
trlkly 30.04.19
Masz tutaj dwa pytania. Czy możesz podzielić 2. miejsce na nowe pytanie?
ctrl-alt-delor

Odpowiedzi:

15

Możesz uruchomić jobspolecenie w sesji, aby wyświetlić listę aktywnych zadań w tle, a następnie umieścić je na pierwszym planie, wpisując fg <job number>. Następnie wpisz Ctrl+, Caby zatrzymać tę nieskończoną pętlę.

Ten scenariusz działa tylko w terminalu z uruchomionym fragmentem kodu.


Wyjaśnienie:

tput sc - zapisz pozycję kursora.

tput cup 0 $(($(tput cols)-29))- przesuń kursor do pozycji 0osi Y i (count of screen columns minus 29)osi X.

date - po prostu wydrukuj aktualną datę.

tput rc - przywróć pozycję kursora.

while sleep 1; ... do ... ; done - pętla z opóźnieniem 1 sekundy.

Wpisz, help whileaby dowiedzieć się więcej o whilepętli w powłoce i postępuj zgodnie z instrukcją man 1 tput lub tldp tput, aby dowiedzieć się, jak działa tput.

Jurij Gonczaruk
źródło
Nadal chciałbym wiedzieć, w jaki sposób kod zrobił to, co zrobił.
Kartik Chauhan
@KartikChauhan Przedstawiłem również wyjaśnienie.
Yurij Goncharuk
@KartikChauhan Masz rację! Dzięki! Właśnie to naprawiłem.
Yurij Goncharuk
3
kill %1(lub inny numer, jeśli istnieje wiele miejsc pracy) jest alternatywą dla fg+Ctrl-C
Roman Odaisky 30.04.19