web-dev-qa-db-fra.com

Comment puis-je déclencher une notification test travail/processus se termine?

Le lieu où je travaille a des commandes qui prennent beaucoup de temps à exécuter.

Existe-t-il une commande/un utilitaire que je peux utiliser pour me prévenir lorsque l'exécution de la commande est terminée? Ce pourrait être une fenêtre popup ou peut-être un peu de son.

84
Utkarsh Sinha

Généralement, si vous connaissez avanten exécutant la commande, vous pouvez simplement le démarrer avec:

command; command-after &

Ceci exécutera le command-afteraprès quela commande précédente se soit terminée (quel que soit son code de sortie). Le & le démarrera en arrière-plan.

Si vous vous souciez d'une sortie réussie ou échouée, utilisez respectivement:

command && command-after-only-if-success &
command || command-after-only-if-fail &

Si la commande a déjàdémarré, vous pouvez utiliser le contrôle du travail pour le suspendre, puis renvoyez-le au premier plan avec fg chaîné avec votre notification:

command
# enter Ctrl-z
fg ; command-after

Maintenant… ce que vous voulez faire après cela dépend de votre environnement.

  • Sur n’importe quel système , vous pouvez "sonner" la sonnette . Dépend de votre système exact ce qui fonctionne vraiment (BSD vs. GNU Linux, etc.), mais tput bel devrait faire l'affaire. Cependant, je ne pouvais pas le tester de manière fiable maintenant. Recherchez "sonnerie" pour en savoir plus.

  • Sur Mac OS X , vous pouvez utiliser AppleScript pour faire apparaître une boîte de dialogue du Finder:

    osascript -e 'tell Application "Finder" to display dialog "Job finished" '
    

    Vous pourriez le faire dire quelque chose à vous:

    say "Job finished"
    

    Ou vous pouvez utiliser le système de notification de Mountain Lion:

    Sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • DansGNOME, zenity peut afficher une boîte de dialogue GTK, appelée à partir de la ligne de commande. Voir aussi cette question de débordement de pile: montrant une boîte de message à partir d’un script bash sous linux . Il peut être installé via votre gestionnaire de paquets préféré.

    zenity --info --text="Job finished"
    
  • Certaines distributions peuvent avoir xmessage . Spécifiquement pour les environnements GTK, il existe gxmessage .

  • Ubuntu a un système de notification que vous pouvez déclencher avec notify-send .

    notify-send "Job finished!"
    
  • KDEutilise kdialog, par exemple:

    kdialog --passivepopup 'Job finished'
    
114
slhck

Sur les systèmes de type Unix, vous pouvez faire sonner le son:

echo -e "\a"
19
trinth

J'ai créé un outil simple, pour MacOS X, qui fait exactement cela. https://github.com/vikfroberg/brb

Installation

$ npm install -g brb

Instructions

$ sleep 3; brb
8
Viktor Fröberg

Pour obtenir une notification sonore, vous pouvez utiliser spd-say "Some text". Exemple:

some-command; spd-say "Yo"
5
milkovsky

Je viens de commencer à utiliser notifu pour les notifications de bureau de Cygwin. C'est une application de notification en ligne de commande pour Windows.

Exemple:

ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
4
Ashutosh Jindal

J'ai écrit ntfy exactement dans ce but. Il s’agit de multiplate-forme et pouvez automatiquement envoyer des notifications à la fin des commandes en cours.

Si vous possédez la variable pip de Python (la plupart des distributions Linux et MacOS l’ont), voici comment l’installer et activer les notifications automatiques:

$ Sudo pip install ntfy
$ echo 'eval "$(ntfy Shell-integration)"' >> ~/.bashrc
$ # restart your Shell

Découvrez-le sur http://ntfy.rtfd.io

En plus de cela, il peut aussi:

  • supprime les notifications automatiques lorsque le terminal est au premier plan (X11, iTerm2 et Terminal.app sont pris en charge et activés par défaut)
  • envoyer des notifications en nuage (Pushover, Pushbullet et XMPP)
  • être utilisé pour envoyer des notifications à la fin d'un processus (et non de l'assistance automatique susmentionnée)
  • envoyer manuellement des notifications (bon pour une utilisation dans les scripts!)
4
Daniel Schep

Pour Linux, il existe un truc astucieux pour le faire automatiquement sans avoir à taper une commande de notification à chaque fois.

Installez d'abord Autokey. Cela aide à définir des actions pour différentes frappes.

Sudo apt-get install autokey-gtk

Définissez maintenant une nouvelle phrase dans Autokey et affectez le raccourci clavier à Alt + Entrée. Ajouter cette phrase:

; notify-send "Job finished!" &
  #

Notez qu'une nouvelle ligne après la première ligne est importante.

Ajoutez également un filtre de fenêtre. J'utilise guake et terminal. Incluez tout autre terminal que vous utilisez.

.*(guake)|(Terminal).*

Vous avez terminé!!

Maintenant, à chaque fois que vous devez recevoir des notifications pour une commande, exécutez-la en utilisant Alt + Entrée au lieu de Entrée/Retour.

Source: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html

3
shivams

Bien que d’autres réponses aient déjà couvert la plupart des moyens d’obtenir des notifications sur un travail terminé, je tiens à vous donner deux centimes puisque vous avez posé votre question dans le format suivant:

Le lieu où je travaille a des commandes qui prennent beaucoup de temps à exécuter.

J'ai le même problème. Parfois, quelque chose peut durer 15 minutes.

J'ai la fonction suivante dans mon .bashrc:

# Push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
Push() {
    curl -s -F "token=PUSHOVER_TOKEN" \
    -F "user=PUSHOVER_USER" \
    -F "title=terminal" \
    -F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}

Cela utilise l'application Pushover afin d'envoyer une notification à mon téléphone. De cette façon, je peux aller déjeuner ou participer à une réunion tout en étant averti des tâches que j'ai commencées sur mon ordinateur avant de partir.

Je l'utilise de la manière suivante:

command_to_run && Push "yes! command finished successfully!" || Push "awww man! something failed :-("

Ainsi, si la commande retourne un code de sortie correct, le premier Push sera exécuté. En cas d'erreur, le second sera exécuté.

Ofc vous devez créer un utilisateur sur Pushover, et enregistrer une application pour envoyer des notifications de https://pushover.net/

espérons que cela a aidé!

3
Thatkookooguy

Cela arrive donc assez tard, mais j’ai commencé à utiliser un système pour le faire: j’ai un script bash qui exécute la commande qui lui est transmise par la suite.

http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/

#!/bin/bash


# file location : /usr/bin/n

set +e


# $@ executes whatever command is typed after the filename

$@


notify-send "Task Completed"

et puis je commence simplement par n

n bundle install
n npm install
1
Somesh Mukherjee

Si vous utilisez csh ou tcsh comme shell interactif, vous pouvez utiliser la commande notify:

% long-running-command &
[1] 14431
% notify %1
% 
(later, when the command finishes)
[1]    Done                          long-running-command

Vous pouvez obtenir un effet similaire dans bash avec set -b ou set -o notify.

Cela ne répond probablement pas à vos exigences, car tout ce qu’il fait est d’imprimer un message; Je ne pense pas qu'il peut être configuré pour ouvrir une fenêtre ou sonner la cloche.

1
Keith Thompson

Si seulement j'avais remarqué ce fil il y a des années. Ma solution était essentiellement la même que celle de Slhck, mais j'ai écrit un script. Je l'utilise tout le temps. Poster ici pour le partager.

#!/bin/bash

msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi

echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
  unset WINDOWID
  exec zenity --info --text="$msg"
Elif [ -x /usr/bin/xmessage ]; then
  exec xmessage -nearmouse "$msg"
Elif [ -x /usr/bin/osascript ]; then
  if ! $quiet; then say "done" &; fi
  osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
  echo $msg
fi

Une petite explication: la chaîne "\x1b]0;$msg\a" est la séquence d'échappement ANSI pour placer le message dans la barre de titre de la fenêtre à partir de laquelle il a été exécuté. Je trouve assez pratique parfois de pouvoir voir de quelle fenêtre provient le message.

1
Edward Falk

Sur les systèmes avec 'awk' try

awk 'BEGIN{ print "\a" }'

était le seul à travailler pour moi.

1
Krzysztof

Si vous utilisez npm, alors node-notifier fournissez une solution multiplateforme.

notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "

Aperçu

  • Linux KDE

 Linux KDE

  • Les fenêtres

 Windows

  • Mac OS

 mac

  • Grognement

 Growl

1
Édouard Lopez

J'ai créé une application qui enverra une notification à votre téléphone Android à la fin d'un processus afin que vous n'ayez pas à être connecté à votre ordinateur.

Installez, puis ajoutez ;notifier.sh à la fin de votre commande.

Par exemple, si votre commande était make install, vous feriez votre commande:

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier

0
Jolt151

Une autre possibilité consiste à utiliser alert, Works sous Linux.

>any-command; alert

Il donne une notification comme dans l'image. notification d'alerte

0
DTharun