Etre prévenu quand une longue commande a fini son éxécution sous Ubuntu et Mac


Quand on lance une commande qui tourne pendant un certain bout de temps (typiquement une migration ou un encodage en masse), on a pas envie d’avoir les yeux vissés sur le terminal pour savoir quand elle se termine.

Alertes sous Ubuntu

Entrez simplement:

alert "Encore merci et bonne chance, nous sommes avec vous."

Ceci va faire apparaitre une notification avec le message passé en paramètre.

Pour avoir l’alerte lancée une fois une commande terminée, il suffit de la mettre just après, derrière un point virgule:

sleep 5; alert

Le message sera alors la commande précédente.

Pour ceux qui ne sont pas sous Ubuntu, on peut créer la commande manuellement (Ubuntu ne fait que mettre cette ligne par défaut dans le .bashrc):

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

Il faut bien entendu s’assurer que la commande “notify-send” soit installée.

Alertes sous Mac

Mac vient avec un synthétiseur vocal qui peut être utilisé de manière similaire:

say "I just want to thank you both, we're all counting on you."

Le Mac va alors vous lire la phrase à haute, hum… voix. Il faut bien sûr s’assurer que l’on a le volume réglé en conséquence sinon l’alerte risque de ne pas se passer comme prévu :-)

Un bon truc donc pour foutre la honte à votre collègue de bureau, mettez le sond à fond et lancez juste avant la pause déjeûner dans un onglet discretos:

sleep 5000; say "Oh yeah bitch, just like that, just like that. Suck it ! Suck it hard. Oh Yeaaaaaaaaaaaaaa!"

C’est particulièrement perturbant sur une voix de synthèse.

Cette commande fonctionne mieux avec des phrases en anglais.

Attention cependant, ces deux astuces ne fonctionnent qu’en local, puisse qu’un ordinateur distant n’a pas accès au système de notification de votre desktop. Un défaut ennuyeux car on lance souvent des commandes longues via SSH.

6 thoughts on “Etre prévenu quand une longue commande a fini son éxécution sous Ubuntu et Mac

  • Erwan

    via ssh avec putty, il suffit d’activer la cloche et de la faire sonner avec l’alerte :)

    • Sam Post author

      A noter que ça ne marchera pas sur les systèmes sur lesquels les sons issus du terminal sont désactivés par défaut (ex: Ubuntu, même si on utilise généralement putty sous Windows et que je ne sais pas si c’est déactivable sous cet OS).

  • Guillaume

    Sur mon OS X Lion, alert n’est pas une commande connue. Par contre on peux utiliser printf '\a' qui fait sautiller l’icone de Terminal et ajoute un compteur rouge façon Mail (mais je dois admettre que c’est bien moins fun que la synthèse vocale).

  • Oko

    Moyennant quelques astuces, pas de souci avec SSH.

    Les deux étapes clef:
    – alert est un alias, on peut récupérer son contenu via la commande ‘alias’
    – il faut spécifier le serveur X qu’on utilise, par défaut :0

    Pour Ubuntu (testé sur 12.04):

    ssh localhost

    alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

    export DISPLAY=:0

    alert "Cette action n'est pas autorisée durant vos heures de travail"

  • Sam Post author

    @Guillaume: oui c’est une typo. La commande sous Mac pour le synthetiseur vocal est “say”. J’ai corrigé ça. A noter que “say” peut être installée sous Ubuntu avec le paquet gnustep mais je n’ai pas réussi à le faire fonctionner.

    @Oko: je n’ai pas reussi à faire fonctionner ton astuce. Tu peux donner plus de détails ?

    J’ai bien la commande “alert” en remote, et j’ai entré “export DISPLAY=:0” mais je me retrouve invariablement avec “libnotify-Message: Unable to get session bus: Failed to execute dbus-launch to autolaunch D-Bus session” (puisque on remote n’utilise pas DBUS).

    J’ai tenté un SSH -X sans plus de résultat.

    Quand à l’interface des commentaires, elle est globalement à revoir:

    – pas de préview;
    – pas de moyen de mettre du code facilement;
    – impossibilité de mettre un boulet à l’amende.

    L’UI de wordpress de base est limitée, il va falloir creuser du côter des plugins.

  • Oko

    Je pense qu’on essaie de faire quelque-chose de différent avec “alert”:

    Mes précédentes explications sont pour afficher l’alerte sur la machine distante (serveur ssh), qui a un serveur X qui tourne.

    Ca devrait néanmoins aussi fonctionner en “ssh -X” (ça marche en “ssh -X localhost”, mais dans ce cas il semble qu’un serveur DBUS soit nécessaire sur le serveur.

    Pour le problème du DBUS, cette page peut être intéressante: http://cweiske.de/tagebuch/DBus%20notify-send%20over%20network.htm

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.