Question Comment puis-je déclencher une notification lorsqu'un travail / processus se termine?


L'endroit 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? Cela pourrait être une fenêtre popup ou peut-être un peu de son.


82
2017-10-11 20:22


origine


La réponse de @ slhck est cool - j'aurais dû réaliser que fg;say "Job finished" travaillerait. Mais ... existe-t-il un moyen d’automatiser davantage le processus, c’est-à-dire de sonner la cloche ou d’en aviser après avoir terminé tout travail nécessitant plus d’un seuil, comme une minute? Y a-t-il une variable shell, par ex. en bash, c'est le temps écoulé de la dernière commande? - Krazy Glew
... 2 heures plus tard, trouvé stackoverflow.com/questions/1862510/... ... put '(($ timer_show> $ {LONG_RUNTIME: -300})) && dis "long travail en cours terminé"' dans timer_stop ... suivant, ajoute aux commandes de compilation d'emac ... et notifie ma montre Pebble ( Je déteste les notifications téléphoniques) - Krazy Glew


Réponses:


Généralement, si vous le savez avant En exécutant la commande, vous pouvez simplement le démarrer avec:

command; command-after &

Cela va exécuter le command-after  après la commande précédente est sortie (quel que soit son code de sortie). le & le démarrera en arrière-plan.

Si vous êtes intéressé par une sortie réussie ou un échec, utilisez respectivement:

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

Si la commande a déjà commencé, vous pouvez utiliser le contrôle des travaux pour le suspendre, puis le renvoyer au premier plan avec fg enchaî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 cloche du terminal. Dépend de votre système exact ce qui fonctionne vraiment (BSD vs Linux GNU, etc.), mais tput bel devrait faire. Je ne pouvais pas le tester de manière fiable pour le moment, cependant. Recherchez "sonnerie" pour en savoir plus.

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

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

    Vous pourriez l'avoir dit quelque chose:

    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"
    
  • Dans GNOME, zenity peut afficher une boîte de dialogue GTK, appelée depuis la ligne de commande. Voir aussi cette question Stack Overflow: montrant une boîte de message à partir d'un script bash dans linux. Il peut être installé via votre gestionnaire de paquets préféré.

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

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

    notify-send "Job finished!"
    
  • KDE les usages kdialog, par exemple:

    kdialog --passivepopup 'Job finished'
    

112
2017-10-11 20:40



Faites-moi savoir quelle commande vous avez utilisée! J'ai également ajouté d'autres options. - slhck
Je bricole avec notify-send et xmessage. Les deux semblent être intéressants! Voici la prochaine chose que je cherche - superuser.com/questions/345463/... - Utkarsh Sinha
sous Mac OS X, vous pouvez également utiliser l'utilitaire de ligne de commande "say". il y a aussi beaucoup de voix disponibles, cochez "say -h";) - trinth
Excellente réponse! - SunnyShah
Pourquoi suggérez-vous que "command-after" soit exécuté de manière asynchrone? Voulez-vous dire (command; command-after) &? - G-Man


Sur les systèmes de type Unix, vous pouvez appeler la sonnerie audible:

echo -e "\a"

19
2017-10-10 18:29



Ceci est vraiment utile en plus d'une notification de message sur mac - Sirens
pareil que tput bel - Dwight Spencer


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
2018-06-08 10:43





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

Exemple:

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

4
2017-09-13 07:21





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

some-command; spd-say "Yo"

4
2017-12-15 17:54



Quel OS? Je ne le vois pas sur Mac ou Ubuntu - Edward Falk
@EdwardFalk J'utilise Ubuntu - milkovsky
OK, j'utilise une très vieille version, alors peut-être que c'est dans les nouvelles versions. - Edward Falk
C'est juste une application de synthèse vocale. Vous pouvez l'installer via sudo apt-get install speech-dispatcher. Ou utiliser des alternatives askubuntu.com/questions/501910/... - milkovsky
Ahh, pas installé par défaut? J'aurais dû y réfléchir. Merci pour le lien. - Edward Falk


Pour Linux, il existe une astuce astucieuse pour le faire automatiquement sans avoir à taper une commande pour la notification à chaque fois.

Installez d'abord autokey. Cela permet de définir des actions pour différentes frappes.

sudo apt-get install autokey-gtk

Maintenant, définissez une nouvelle phrase dans Autokey et assignez 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 le guake et le terminal. Inclure tout autre terminal que vous utilisez.

.*(guake)|(Terminal).*

Vous avez terminé!!

Maintenant, chaque fois que vous avez besoin d'obtenir des notifications pour une commande, exécutez-la en utilisant Alt + Entrée au lieu de Entrée / Retour.

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


3
2017-12-27 12:39





Bien que d'autres réponses couvrent déjà la plupart des façons d'obtenir des notifications sur un travail fini, je veux donner mes deux centimes depuis que vous avez posé votre question dans le format suivant:

L'endroit 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 pour pousser une notification sur mon téléphone. De cette façon, je peux aller déjeuner ou participer à une réunion et recevoir des notifications sur les tâches que j'ai démarré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, la première poussée sera exécutée. En cas d'erreur, le second sera exécuté.

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

j'espère que ça a aidé!


3
2018-06-23 11:15



OK, alors "pushover" est un service Web qui envoie des notifications aux téléphones sur lesquels l'application "pushover" est installée? - Edward Falk
c'est un service Web qui envoie des notifications à téléphones, ordinateurs et tout avec un navigateur Web moderne. Ainsi, vous pouvez avoir le pushover ouvert sur votre PC et votre téléphone et être notifié sur tous les appareils. bien, hein? :-) - Thatkookooguy