5 votes

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

Je cherche une application pour organiser mes tâches quotidiennes dans différents minuteurs de compte à rebours similaires à celui trouvé sur www.timeanddate.com/timer/

Les fonctionnalités que je recherche seraient:

  • fonctionne dans le terminal bash ou zsh
  • plusieurs minuteurs de compte à rebours indépendants
  • émet un son ou affiche une notification une fois qu'un minuteur est terminé

Veuillez noter que le suivi du temps n'est pas une fonctionnalité importante, simplement le compte à rebours suffit.

Merci.


entrer la description de l'image ici

6voto

thom Points 6932

Depuis le terminal, utilisez la commande "at" pour définir votre minuteur, "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" par exemple pour jouer un son au lieu d'une notification).

1voto

carrie Points 1

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 comment termdown fonctionne.

tmux et screen vous permettent d'exécuter plusieurs compte à rebours en même temps.

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, j'exécuterai pomodoro dans une fenêtre tmux ou screen. De cette façon, je peux créer plusieurs countdowns.

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

Je mettrais en place plusieurs fenêtres tmux pour des minuteurs spécifiques à l'avance.

1voto

WinEunuuchs2Unix Points 91128

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 chaque utilisation.
  • Jusqu'à 19 minuteries s'exécutent séquentiellement 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.
  • Prompt facultatif pour démarrer chaque minuterie et/ou ensemble.
  • Message contextuel facultatif lorsque chaque minuterie et/ou ensemble se termine.
  • Alarme facultative lorsque chaque minuterie et/ou ensemble se termine.
  • Verrouillage facultatif de l'écran lorsque chaque minuterie OU ensemble OU tous les ensembles se terminent.
  • Interface facultative vers l'indicateur de Sysmonitor afin que la barre d'état système affiche les décomptes.
  • Fermeture facultative de l'affichage de la barre de progression lorsque tous les ensembles de minuteries se terminent.

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

0voto

Dreamcat4 Points 190

Voici une fonction shell que j'ai développée aujourd'hui pour résoudre ce problème exact pour moi. Je pense que cela fonctionne plutôt bien. Les instructions d'utilisation complètes sont incluses dans les commentaires.

mis à jour :

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

Si vous voulez utiliser cette fonction shell comme un script, il vous suffit de la copier-coller dans un nouveau fichier avec le shebang #!/bin/sh comme première ligne. Ensuite, à la fin du fichier, appelez la fonction avec timer "$@" pour lui transmettre tous les arguments de la ligne de commande.

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

timer() {
  # testé sur ubuntu 18.04
  # installation : copiez-collez cette fonction shell dans votre ~/.bashrc ou ~/.profile

  # dépendances du programme
  # pour installer les dépendances manquantes sur ubuntu
  #  # sudo apt-get install -y xcowsay
  #  # sudo snap install -y termdown 
  # cette fonction shell utilise également `paplay` (pour émettre un son beep / ding) 
  # et `pgrep` pour vérifier quand une fenêtre xcowsay a été cliquée sur et fermée
  # (cependant, sur ubuntu desktop 18.04, à la fois `paplay` et `pgrep` sont déjà installés par défaut)

  # exemples d'utilisation
  # la chaîne d'entrée est analysée par la commande date unix. testé avec "date (GNU coreutils) 8.28"
  # ... cette version de date semble capable de comprendre et de traduire ces chaînes lisibles par l'homme

  # timer "1h1m30s"
  # timer"1h 1m 30s"
  # timer "1 minute 30 secondes"
  # timer "15 minutes"
  # timer "2 heures 30 minutes"

  # timer "00:45:00" # = "45 minutes"
  # timer "00:00:45" # = "45 secondes"
  # timer "1:1:1"    # = 1 heure, 1 minute et 1 seconde

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

  # convertir la chaîne d'entrée en secondes, et attendre jusqu'à la fin du temps
  # _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 && \
  (
    # gérer ctrl+c de manière élégante
    trap "killall -q xcowsay; exit 1" INT

    # afficher des notifications sur tous les moniteurs, 1 notification par moniteur
    i=0; num_monitors="$(xrandr -q| grep " connected" | wc -l)"
    while [ "$i" -lt "$num_monitors" ]; do

      # cette commande affiche la notification elle-même, et est personnalisable 
      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
      # détecter si des notifications ont été fermées, puis sortir de manière élégante
      num_cows="$(pgrep -c xcowsay)"
      [ "$(expr $num_monitors - $num_cows)" -gt 0 ] && break
      # émettre un son d'alerte audible de type ding ou beep répété lentement
      paplay "$_sound_file_remind_repeat"
      sleep $_bell_repeat_delay || break
    done

    # fermer toutes les notifications, lorsqu'elles sont affichées sur plusieurs moniteurs
    killall -q xcowsay
    trap - INT
  )

}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X