web-dev-qa-db-fra.com

Application de minuterie à compte à rebours multiple pour Bash / Zsh

Je suis à la recherche d'une application pour organiser mes tâches quotidiennes dans différents comptes à rebours similaires à celui trouvé sur www.timeanddate.com/timer/

Les caractéristiques que je cherche seraient:

  • fonctionne en terminal bash ou zsh
  • plusieurs comptes à rebours indépendants
  • joue un son ou une notification une fois le délai écoulé

S'il vous plaît noter que le chronométrage n'est pas une fonctionnalité importante, juste le compte à rebours est suffisant.

Je vous remercie.


enter image description here

4
somethis

Depuis le terminal, utilisez la commande "at" pour régler votre temporisateur, "at" est très flexible car il peut être utilisé avec un temps absolu et relatif (pour plus d'informations: man at):

at now + 1 minute <<<'notify-send ALARM'

"notify-send" placera une notification sur votre bureau
(n'hésitez pas à le remplacer par "aplay" pour émettre un son au lieu d'une notification).

3
thom

La fonction Heres a Shell a mis au point aujourd'hui pour résoudre ce problème précis pour moi-même. Je pense que cela fonctionne plutôt bien. Des instructions d'utilisation complètes sont incluses dans les commentaires.

mis à jour:

Nécessite maintenant une nouvelle dépendance, termdown, pour afficher un compte à rebours dans le terminal.

Si vous souhaitez utiliser cette fonction Shell en tant que script, copiez-le simplement, collez-le dans un nouveau fichier portant le #!/bin/sh Shebang en tant que ligne 1. Ensuite, à la fin du fichier, appelez la fonction timer "$@" pour y passer tous les arguments de la ligne de commande.

J'espère que cela répond aux critiques formulées précédemment.

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
  #  # Sudo snap install -y termdown 
  # 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

  # timer "1h1m30s"
  # timer "1h 1m 30s"
  # 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

  # begin
  _time="$1"
  _bell_repeat_delay="3"

  # convert input string to seconds, and sleep until time is up
  # _seconds="$(local Epoch=$(date --utc -d @0 +%F); date --utc -d "$Epoch $time" +%s.%09N)"



  if echo "$_time" | grep -q -E '^[0-9]+$'; then
      _seconds="$_time"
  else
    _date_flag="$(echo "$_time" | sed  -e "s/s/SECONDS/g"  -e "s/m/MINUTES/g"  -e "s/h/HOURS/g")"
    _seconds="$(date -d "1970-01-01 00:00:00 UTC ${_date_flag}" "+%s")"
  fi

  _critical="$(echo $_seconds / 10 | bc)"
  if [ $_seconds -lt 60 ]; then
    _critical=20

  Elif [ $_seconds -lt 100 ]; then
    _critical=30

  Elif [ $_seconds -lt 200 ]; then
    _critical=40

  Elif [ $_seconds -lt 300 ]; then
    _critical=60
  fi

  # sleep _seconds && \
  termdown --critical $_critical --voice en $_seconds && \
  (
    # 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

    _sound_file_timer_expired="/usr/share/sounds/gnome/default/alerts/drip.ogg"
    _sound_file_remind_repeat="/usr/share/sounds/freedesktop/stereo/complete.oga"

    audacious --pause
    # play -v15 "$_sound_file_timer_expired"
    paplay "$_sound_file_timer_expired"

    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 "$_sound_file_remind_repeat"
      sleep $_bell_repeat_delay || break
    done

    # dismiss all of the notifications, when displayed on multiple monitors
    killall -q xcowsay
    trap - INT
  )

}
0
Dreamcat4

Il y a un script bash ici dans Ask Ubuntu appelé multi-timer

multi-timer Affichage de la barre de progression

peek wash cycle.png

Caractéristiques

  • Conserve la configuration entre les utilisations.
  • Jusqu'à 19 minuteries sont exécutées de manière séquentielle dans un ensemble.
  • Barre de progression pour chaque minuterie.
  • Un ensemble de minuteries peut être exécuté plusieurs fois.
  • Barre de progression pour l'ensemble.
  • Barre de progression pour tous les ensembles.
  • Invite facultative pour démarrer chaque minuterie et/ou série.
  • Message contextuel facultatif à la fin de chaque minuterie et/ou ensemble.
  • Alarme optionnelle à la fin de chaque minuterie et/ou série.
  • Écran de verrouillage facultatif lorsque chaque minuterie OR définit OR tous les ensembles sont terminés.
  • Interface optionnelle avec l'indicateur Sysmonitor afin que Systray affiche les comptes à rebours.
  • La barre de progression de fermeture facultative s'affiche lorsque tous les ensembles de minuteries se terminent.

Visitez le lien ci-dessus pour les captures d'écran et le code bash.

0
WinEunuuchs2Unix

Vous pouvez combiner tmux ou screen avec termdown.

Termdown est un minuteur ncurses.

http://www.slashgeek.net/2016/10/25/termdown-cli-countdown-timer-stopwatch/ montre le fonctionnement de termdown.

tmux et screen vous permettent de lancer plusieurs comptes à la fois.

Je ferais des scripts comme

~/.bin/pomodoro:
#!/bin/sh
termdown 25:00 && mplayer /path/to/sound.mp3

~/.bin/5minbreak:
#!/bin/sh
termdown 05:00 && mplayer /path/to/break.mp3

Et, je vais exécuter pomodoro dans un tmux ou une fenêtre d’écran. De cette façon, je peux créer plusieurs comptes à rebours.

Voulez-vous des notifications? Vous pouvez également combiner des commandes de notification avec termdown.

J'avais déjà configuré plusieurs fenêtres tmux pour des minuteries spécifiques.

0
crocket