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.
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-after
aprè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'
Sur les systèmes de type Unix, vous pouvez faire sonner le son:
echo -e "\a"
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
Pour obtenir une notification sonore, vous pouvez utiliser spd-say "Some text"
. Exemple:
some-command; spd-say "Yo"
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."
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:
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
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é!
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
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.
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.
Sur les systèmes avec 'awk' try
awk 'BEGIN{ print "\a" }'
était le seul à travailler pour moi.
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. "
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
Une autre possibilité consiste à utiliser alert
, Works sous Linux.
>any-command; alert
Il donne une notification comme dans l'image. notification d'alerte