Jak wyświetlić licznik czasu rzeczywistego na terminalu Linux? Czy istnieje już taka aplikacja, a jeszcze lepiej jedna linijka?
źródło
Jak wyświetlić licznik czasu rzeczywistego na terminalu Linux? Czy istnieje już taka aplikacja, a jeszcze lepiej jedna linijka?
Nie jestem pewien, dlaczego potrzebujesz beep
, jeśli wszystko, czego potrzebujesz, to stoper, możesz to zrobić:
while true; do echo -ne "`date`\r"; done
To pokaże sekundy w czasie rzeczywistym i możesz to zatrzymać za pomocą Ctrl+ C. Jeśli potrzebujesz większej precyzji, możesz użyć tego, aby uzyskać nanosekundy:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Wreszcie, jeśli naprawdę chcesz naprawdę „formatu stopera”, w którym wszystko zaczyna się od 0 i zaczyna rosnąć, możesz zrobić coś takiego:
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
W przypadku licznika czasu (który nie jest tym, o co pytałeś w pierwotnym pytaniu) możesz to zrobić (odpowiednio zmień sekundy):
seconds=20; date1=$((`date +%s` + $seconds));
while [ "$date1" -ge `date +%s` ]; do
echo -ne "$(date -u --date @$(($date1 - `date +%s` )) +%H:%M:%S)\r";
done
Możesz łączyć je w proste polecenia, używając funkcji bash (lub dowolnej powłoki, którą preferujesz). W bash dodaj te wiersze do swojego ~/.bashrc
( sleep 0.1
spowoduje to, że system będzie czekał przez 1/10 sekundy między każdym uruchomieniem, abyś nie spamował procesora):
function countdown(){
date1=$((`date +%s` + $1));
while [ "$date1" -ge `date +%s` ]; do
echo -ne "$(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r";
sleep 0.1
done
}
function stopwatch(){
date1=`date +%s`;
while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Następnie możesz uruchomić minutnik odliczający minutę, uruchamiając:
countdown 60
Możesz odliczać dwie godziny dzięki:
countdown $((2*60*60))
lub cały dzień przy użyciu:
countdown $((24*60*60))
I uruchom stoper, uruchamiając:
stopwatch
Jeśli potrzebujesz umieć radzić sobie z dniami, godzinami, minutami i sekundami, możesz zrobić coś takiego:
countdown(){
date1=$((`date +%s` + $1));
while [ "$date1" -ge `date +%s` ]; do
## Is this more than 24h away?
days=$(($(($(( $date1 - $(date +%s))) * 1 ))/86400))
echo -ne "$days day(s) and $(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r";
sleep 0.1
done
}
stopwatch(){
date1=`date +%s`;
while true; do
days=$(( $(($(date +%s) - date1)) / 86400 ))
echo -ne "$days day(s) and $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Pamiętaj, że stopwatch
funkcja nie była testowana od wielu dni, ponieważ tak naprawdę nie chciałem czekać na nią 24 godziny. Powinien działać, ale proszę dać mi znać, jeśli nie działa.
.zshrc
zaraz po przeczytaniu twojej odpowiedzi. Dzisiaj użyłemcountdown
pierwszy raz i zauważyłem dość wysokie zużycie procesora. Dodałemsleep 0.1
(nie wiem, czy czas uśpienia ułamka sekundy jest obsługiwany we wszystkich systemach), co znacznie to poprawiło. Wadą jest oczywiście mniej dokładna dokładność wyświetlania, ale mogę żyć z odchyleniem maks. 100ms.bash
, mogę z tym żyć (chociaż jest to wyższe niż się spodziewałem i dodałem też sen do własnego .bashrc).date +%s
- $ data1)) +% H:% M:% S) ";echo -ne "$(date -ju -f %s $(($date1 -
data +% s)) +%H:%M:%S)\r"
;play -q -n synth 2 pluck C5
.Mój ulubiony sposób to:
Początek:
Zatrzymać:
Jak skomentował @wjandrea poniżej, należy uruchomić inną wersję:
i naciśnij,
Enter
aby zatrzymaćźródło
time read
time read
kończy się niepowodzeniem w Zsh, aletime (read)
działa.Szukałem tego samego i ostatecznie napisałem coś bardziej skomplikowanego w Pythonie:
To da ci proste 10-sekundowe odliczanie:
Źródło: https://github.com/trehn/termdown
źródło
Użyłem tego:
Przykład:
Oto źródło .
źródło
ustawić minutnik na 15 minut
edytuj: Miałem kilka otwartych linków i pomyślałem, że to jest specyficzne dla OSX, przepraszam za to. Pozostawiając moją odpowiedź, aby inni byli świadomi urlopu na BSD.
źródło
To jest dla stopera z setnymi sekund:
Przykład
źródło
return $1
Połączyłem bardzo dobrą odpowiedź terdona, w funkcję, która jednocześnie wyświetla czas od początku i czas do końca. Istnieją również trzy warianty, więc łatwiej jest zadzwonić (nie musisz robić matematyki), a także jest abstrakcyjne. Przykład zastosowania :
I coś w stylu timera pracy:
A jeśli potrzebujesz bardzo konkretnego czasu:
Oto kod do umieszczenia w .bashrc
Połącz to z jakimś sposobem odtwarzania dźwięku w terminalu linuksowym ( odtwarzaj pliki mp3 lub wav za pomocą wiersza poleceń Linuksa ) lub cygwin (
cat /path/foo.wav > /dev/dsp
działa dla mnie w babun / win7) i masz prosty elastyczny zegar z alarmem !źródło
Inne podejście
Dla Maca:
Jeśli ktoś chce otrzymać sygnał, gdy osiągnie zero, może np. Zbudować go za pomocą polecenia, które zwróciło niezerowy status wyjścia na zero i połączyć go z
watch -b
czymś innym, ale jeśli chce się zbudować bardziej skomplikowany skrypt, to prawdopodobnie nie taka droga; jest to bardziej „szybkie i brudne rozwiązanie typu single-liner”.watch
Ogólnie podoba mi się ten program. Po raz pierwszy to zobaczyłem po tym, jak napisałem już niezliczoną liczbęwhile sleep 5; do
pętli do różnych efektów.watch
był wyraźnie ładniejszy.źródło
W końcu napisałem własny skrypt powłoki: github gist
źródło
Dziwi mnie, że nikt nie używał tego
sleepenh
narzędzia w swoich skryptach. Zamiast tego proponowane rozwiązania wykorzystują albosleep 1
pomiędzy kolejnymi wyjściami timera, albo zajętą pętlą, która wysyła tak szybko, jak to możliwe. Ten pierwszy jest nieodpowiedni, ponieważ z uwagi na krótki czas drukowania, wydruk nie będzie się odbywał raz na sekundę, ale będzie nieco mniejszy niż ten, który nie jest optymalny. Po upływie wystarczającego czasu licznik przeskoczy o sekundę. Ta ostatnia jest nieodpowiednia, ponieważ powoduje, że procesor jest zajęty bez powodu.Narzędzie, które mam,
$PATH
wygląda następująco:Skrypt może być używany jako stoper (odliczanie do przerwania) lub jako licznik czasu, który działa przez określony czas. Ponieważ
sleep
polecenie jest używane, ten skrypt pozwala określić czas, przez który należy liczyć z taką samą dokładnością, jaksleep
pozwala. W przypadku Debiana i pochodnych obejmuje to snu poniżej sekundy i miły, czytelny dla człowieka sposób określania czasu. Na przykład możesz powiedzieć:Jak widać, polecenie działało dokładnie przez 2 minuty i 4,6 sekundy, bez dużej ilości magii w samym skrypcie.
EDYCJA :
Narzędzie sleepenh pochodzi z pakietu o tej samej nazwie w Debianie i jego pochodnych, takich jak Ubuntu. W przypadku dystrybucji, które go nie mają, pochodzi z https://github.com/nsc-deb/sleepenh
Zaletą Sleepenh jest to, że jest w stanie wziąć pod uwagę niewielkie opóźnienie, które kumuluje się w czasie od przetwarzania innych rzeczy niż sen podczas pętli. Nawet jeśli ktoś
sleep 1
wykona tylko pętlę 10 razy, ogólne wykonanie zajmie trochę więcej niż 10 sekund z powodu niewielkiego narzutu związanego z wykonywaniemsleep
i iteracją pętli. Ten błąd powoli narasta i z czasem sprawi, że nasz stoper będzie coraz bardziej nieprecyzyjny. Aby rozwiązać ten problem, każda iteracja pętli musi obliczyć dokładny czas uśpienia, który zwykle jest nieco krótszy niż sekunda (dla timerów interwału 1-sekundowego). Narzędzie Sleepenh robi to za Ciebie.źródło
sleep 0.1
. Co to jestsleepnh
(nie mogę go znaleźć w repozytoriach Arch) i czym się różnisleep
? O ile mogę stwierdzić, zasadniczo robisz to samo, co moja odpowiedź powyżej. czego mi brakuje?sleep 5
polega na tym, że nie śpisz dokładnie przez 5 sekund. Spróbuj na przykładtime sleep 5
i zobaczysz, że uruchomienie polecenia zajmuje nieco ponad 5 sekund. Z czasem błędy się kumulują. Narzędzie Sleepenh pozwala łatwo uniknąć gromadzenia się błędów.sleepnh
jest lepszy niżsleep
(mówisz tylko, że inne odpowiedzi używająsleep 1
- a których nie , wykorzystuje to tylko OP) i ii) skąd go pobrać i jak go zainstalować, ponieważ nie jest to standardowe narzędzie.sleep
orazsleepenh
w pierwszym akapicie. W każdym razie, prawdopodobnie nie byłem wystarczająco jasny, więc rozwinąłem to bardziej na końcu. Problemy z dokładnością co do milisekund są takie same, jak w przypadkusleep
jednorazowego połączenia . Gromadzą się one z czasem i w pewnym momencie jest to zauważalne. Nie powiedziałem, że inni używają tylkosleep 1
. Powiedziałem, że używająsleep 1
albo busyloop. Co oni nadal robią. Pokaż mi licznik. Odpowiedzi, któresleep 0.1
to robią, są takie same, jak te,sleep 1
z wyjątkiem tego, że kumulują błędy jeszcze szybciej.Krótka odpowiedź:
Wyjaśnienie:
Wiem, że jest wiele odpowiedzi, ale chcę tylko napisać coś bardzo zbliżonego do pytania OP, które osobiście zaakceptowałbym jako „ odliczanie onelinera w terminalu ”. Moimi celami były:
Jak to działa:
seq
drukuje liczby od 60 do 1.echo -ne "\r$i "
zwraca daszek na początek łańcucha i wypisuje bieżącą$i
wartość. Spacja po nim jest wymagana do zastąpienia poprzedniej wartości, jeśli była dłuższa o znaki niż bieżąca$i
(10 -> 9).źródło
Do wykorzystania w przyszłości istnieje narzędzie wiersza polecenia o nazwie µTimer z bardzo prostymi opcjami wiersza poleceń dla licznika odliczania / odliczania.
źródło
Udawaj, że jesteś osobą w systemie OSX i szukasz stopera z linii poleceń. Udawaj, że nie chcesz instalować narzędzi GNU, a po prostu chcesz działać z Uniksem
date
w takim przypadku postępuj zgodnie z instrukcjami @terdon, ale z tą modyfikacją:
źródło
Wystarczy użyć zegarka + daty w czasie UTC. Możesz także zainstalować pakiet dla dużego wyświetlacza ...
Spróbuj!
Zobacz także http://www.cyberciti.biz/faq/create-large-colorful-text-banner-on-screen/
źródło
sw to prosty stoper, który będzie działał wiecznie.
zainstalować
Stosowanie
źródło
Przykład python:
źródło
Spójrz na TermTime , jest to ładny zegar i stoper oparty na terminalu:
pip install termtime
źródło
Jest to podobne do przyjętej odpowiedzi, ale terdon
countdown()
dał mi błędy składniowe. Ten działa jednak dla mnie świetnie:function timer() { case "$1" in -s) shift;; *) set $(($1 * 60));; esac; local S=" "; for i in $(seq "$1" -1 1); do echo -ne "$S\r $i\r"; sleep 1; done; echo -e "$S\rTime's up!"; }
Możesz go włożyć,
.bashrc
a następnie wykonać za pomocą:timer t
(gdzie t to czas w minutach).źródło
Znalazłem to pytanie dzisiaj, szukając terminowej aplikacji do wyświetlania dużego licznika czasu dla warsztatu. Żadna z sugestii nie była dokładnie tym, czego potrzebowałem, więc szybko przygotowałem kolejną w Go: https://github.com/bnaucler/cdown
Ponieważ odpowiedź na to pytanie jest już wystarczająca, rozważ to dla potomności.
źródło
$ sen 1500 && xterm -fg żółty -g 240x80 &
Kiedy ten duży terminal z żółtym tekstem podskoczy, czas wstać i rozciągnąć się!
Uwagi: - 1500 sekund = 25 minut pomodoro - 240x80 = rozmiar terminala z rzędem 240 znaków i 80 rzędami. Widocznie wypełnia dla mnie ekran.
Źródło: http://www.linuxquestions.org/questions/linux-newbie-8/countdown-timer-for-linux-949463/
źródło
Wersja GUI stopera
źródło
Jeśli chcesz program kompilowany z dowolnego powodu, działałyby następujące czynności:
Można tego użyć w innych programach, a także łatwo przenosić, jeśli środowisko bash nie jest dostępne lub po prostu wolisz używać skompilowanego programu
github
źródło