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ć.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.