Терминал несколько таймер обратного отсчета приложение для 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
    )

}
Другие вопросы по тегам