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 tput
robi polecenie, ale wciąż jest wiele kropek, których nie jestem w stanie połączyć.
jobs
sesję, aby wyświetlić listę aktywnych zadań w tle, a następnie umieścić je na pierwszym planie, wpisującfg <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.Odpowiedzi:
Możesz uruchomić
jobs
polecenie w sesji, aby wyświetlić listę aktywnych zadań w tle, a następnie umieścić je na pierwszym planie, wpisującfg <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 pozycji0
osi 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 while
aby dowiedzieć się więcej owhile
pętli w powłoce i postępuj zgodnie z instrukcją man 1 tput lub tldp tput, aby dowiedzieć się, jak działa tput.źródło
kill %1
(lub inny numer, jeśli istnieje wiele miejsc pracy) jest alternatywą dlafg
+Ctrl-C