Терминал несколько таймер обратного отсчета приложение для Bash / Zsh
Я ищу приложение для организации моих ежедневных задач в различных таймерах обратного отсчета, аналогичных тому, который можно найти на сайте http://www.timeanddate.com/timer/.
Особенности, которые я ищу, будут:
- работает в терминале bash или zsh
- несколько независимых таймеров обратного отсчета
- воспроизводит звук или дисплей уведомлений, когда таймер заканчивается
Обратите внимание, что отслеживание времени не является важной функцией, достаточно только обратного отсчета.
Спасибо.
4 ответа
В терминале используйте команду "at" для установки таймера, "at" очень гибок, так как может использоваться как с абсолютным, так и с относительным временем (для получения дополнительной информации: man at
):
at now + 1 minute <<<'notify-send ALARM'
"уведомить-отправить" разместит уведомление на вашем рабочем столе
(не стесняйтесь заменить его, например, "aplay", чтобы сделать звук вместо уведомления).
Вы можете комбинировать tmux или screen с termdown.
Termdown - это таймер ncurses.
http://www.slashgeek.net/2016/10/25/termdown-cli-countdown-timer-stopwatch/ показывает, как работает termdown.
tmux и screen позволяют запускать несколько отсчетов одновременно.
Я сделал бы сценарии как
~/.bin/pomodoro:
#!/bin/sh
termdown 25:00 && mplayer /path/to/sound.mp3
~/.bin/5minbreak:
#!/bin/sh
termdown 05:00 && mplayer /path/to/break.mp3
И я выполню pomodoro
в окне tmux или экрана. Таким образом, я могу создать несколько отсчетов.
Хотите получать уведомления? Вы также можете комбинировать команды уведомления с termdown.
Я бы заранее настроил несколько окон tmux для определенных таймеров.
В Ask Ubuntu есть скрипт bash, который называется multi-timer
multi-timer
Индикатор выполнения
Характеристики
- Сохраняет конфигурацию между использованиями.
- До 19 таймеров работают последовательно в наборе.
- Индикатор выполнения для каждого таймера.
- Набор таймеров может быть запущен несколько раз.
- Прогресс бар для набора.
- Прогресс бар для всех комплектов.
- Необязательный запрос на запуск каждого таймера и / или установки.
- Дополнительное всплывающее сообщение, когда каждый таймер и / или набор заканчивается.
- Дополнительный сигнал тревоги, когда каждый таймер и / или набор заканчивается.
- Дополнительный экран блокировки, когда каждый таймер ИЛИ устанавливает ИЛИ все наборы заканчиваются.
- Дополнительный интерфейс к индикатору Sysmonitor, поэтому Systray показывает обратный отсчет.
- Опционально закрывать индикатор выполнения, когда заканчиваются все наборы таймеров.
Посетите ссылку выше для скриншотов и bash-кода.
Вот функция оболочки, созданная сегодня, чтобы решить эту проблему для себя. Мне действительно кажется, что это работает довольно хорошо. Полные инструкции по использованию включены в комментарии.
timer() {
# tested on ubuntu 18.04
# installation: copy-paste this shell function into your ~/.bashrc or ~/.profile
# program dependencies
# to install missing dependancies on ubuntu # sudo apt-get install -y xcowsay
# this shell function also uses `paplay` (for making a beep / ding sound)
# and `pgrep` for checking when any xcowsay window was clicked on and dismissed
# (however on ubuntu desktop 18.04, both `paplay` and `pgrep` are already installed by default)
# usage examples
# input string is parsed by the unux date command. tested with "date (GNU coreutils) 8.28"
# ... this version of date seems able to understand and translate these human-readable strings
# BE SURE TO WRAP THE "TIME YOU SPECIFY" IN DOUBLE QUOTES
# You can also optionally suffix & at the end of the command to
# run the job in the background, to do other things or start multiple timers
# timer "1 minute 30 seconds"
# timer "15 minutes"
# timer "2 hours 30 minutes"
# timer "00:45:00" # = "45 minutes"
# timer "00:00:45" # = "45 seconds"
# timer "1:1:1" # = 1 hour, 1 minute and 1 second
# script begin
time="$1"
bell_repeat_delay="3" # seconds
# convert input string to seconds, and sleep until time is up
sleep $(local epoch=$(date --utc -d @0 +%F); date --utc -d "$epoch $time" +%s.%09N) && \
(
# handle ctrl+c gracefully
trap "killall -q xcowsay; exit 1" INT
# display notifications on all monitors, 1 notification per monitor
i=0
num_monitors="$(xrandr -q | grep " connected" | wc -l)"
while [ "$i" -lt "$num_monitors" ]; do
# this cmd displays the notification itself, and is further customizable
xcowsay --monitor=$i --time=0 --cow-size=large "$time is up" &
i="$(expr $i + 1)"
done
while true; do
# detect if any notifications were dismissed, then exit gracefully
num_cows="$(pgrep -c xcowsay)"
[ "$(expr $num_monitors - $num_cows)" -gt 0 ] && break
# make a slowly repeating ding or beep audible alert sound
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
sleep $bell_repeat_delay || break
done
# dismiss all of the notifications, when displayed on multiple monitors
killall -q xcowsay
trap - INT
)
}