web-dev-qa-db-fra.com

Alerte lorsque le programme de terminal est terminé?

Je suis sous Xubuntu 15.04, mais peut-être que cette question a une solution générale pour tous les goûts Ubuntu.

Je laisse généralement de longs calculs en cours d'exécution dans une fenêtre de terminal, ce qui peut prendre de quelques minutes à quelques heures, voire plusieurs jours. Ce serait bien si je pouvais être alerté quand un terminal a fini d'exécuter une commande. Cela ne devrait être nécessaire que pour les terminaux minimisés.

Y at-il un moyen de mettre en place quelque chose comme ça? Idéalement, la fenêtre du terminal pourrait clignoter ou peut-être une notification s'afficherait.

23
becko

Il y a plusieurs façons, toutes les deux avec l'opérateur && (AND logique) (qui s'exécute uniquement lorsque la dernière commande a réussi). Si vous souhaitez exécuter la notification, que la commande ait ou non réussi, utilisez le point-virgule ; au lieu de &&.

  1. Graphique

    myscript.sh && notify-send 'DONE'
    
  2. L'audio:

    myscript.sh && aplay /usr/share/sounds/speech-dispatcher/test.wav
    

    Notez que vous pouvez utiliser n’importe quel fichier audio au lieu de celui que j’ai utilisé ici.

  3. Tous les deux:

     myscript.sh && aplay /usr/share/sounds/speech-dispatcher/test.wav && notify-send 'DONE !'
    
30

Vous pouvez utiliser zenity pour afficher une fenêtre contextuelle.

Après votre commande Shell, ajoutez

&& zenity --info --text "STRING"
12
Bacon

Je suggère d'utiliser le notify-send de libnotify pour les notifications. J'ai créé le script suivant pour cela:

#!/bin/bash
$1 && \
notify-send -u critical -i info 'Command execution finished' "The command '$1' terminated successfully" || \
notify-send -u critical 'Command execution failed' "The command '$1' exited with errors"

Si vous enregistrez le script ci-dessus dans un fichier appelé, par exemple, nexec et le rendre exécutable à l'aide de chmod +x nexec, puis déplacez le programme dans un répertoire de votre variable shells PATH (par exemple, /usr/local/bin/), vous pouvez exécuter toute commande avec

nexec 'long-time-command some arguments'

Par exemple.

nexec 'Sudo apt-get update && apt-get dist-upgrade'

si libnotify le fait (du moins sur mon système, je suppose que cela peut différer d’un bureau à l’autre), les notifications affichées marquées comme "critiques" jusqu’à ce qu’elles soient renvoyées manuellement (par exemple en les cliquant). Comme vous pouvez le déduire du code, vous recevrez une notification différente si la commande renvoie un résultat différent de zéro.

4
s3lph

Avez-vous déjà entendu parler de ndistract-me ? Il semble que cela corresponde à vos besoins et son code est sur github .

Je pense que le paquet est dans le dépôt officiel Ubuntu, donc devrait être suffisant

Sudo apt-get install undistract-me

vous devez ensuite fermer et rouvrir votre terminal, il suffit de laisser les modifications prendre effet et vous pouvez le tester avec un simple

sleep 11

N'oubliez pas de changer votre fenêtre active, sinon vous ne verrez aucune notification.

4
MaxChinni