Come posso triggersre una notifica quando un process / process termina?

Il luogo in cui lavoro a ha comandi che richiedono molto tempo per eseguire.

C'è un command / utility che posso utilizzare per notificarmi quando l'esecuzione del command è finita? Può essere una window popup o forse un suono piccolo.

Generalmente, se lo sai prima di eseguire il command, è ansible avviarlo solo con:

 command; command-after & 

Questo eseguirà il command-after dopo che il command precedente è uscito (indipendentemente dal suo codice di output). Lo & avrà in background.

Se ti interessa una output di successo o di fallimento, utilizza rispettivamente:

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

Se il command è già stato avviato, puoi utilizzare il controllo del process per sospenderlo, quindi riportrlo in primo piano con fg incatenato con la tua notifica:

 command # enter Ctrl-z fg ; command-after 

Ora … quello che vuoi fare dopo questo dipende dal tuo ambiente.

  • Su qualunque sistema , potete "squillare" la campana del terminal . Dipende dal tuo sistema esatto che cosa funziona veramente (BSD vs GNU Linux, ecc.), Ma dovrebbe fare il tput bel . Non ho potuto provarlo affidabilmente in questo momento. Cerca "campana" per saperne di più.

  • Su Mac OS X , è ansible utilizzare AppleScript per aprire una window di dialogo Finder:

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

    Potresti dirti qualcosa a te:

     say "Job finished" 

    Oppure puoi utilizzare il sistema di notifica Mountain Lion:

     sudo gem install terminal-notifier # <= only need to do this once terminal-notifier -message "Job finished!" -title "Info" 
  • In GNOME , zenity può mostrare una window di dialogo GTK, chiamata dalla row di command. Vedere anche questa domanda di overflow dello stack: mostrare una casella di messaggio da uno script bash in linux . Può essere installato tramite il tuo gestore di pacchetti preferito.

     zenity --info --text="Job finished" 
  • Alcune distribuzioni potrebbero avere xmessage . In particolare per gli ambienti GTK, c'è gxmessage .

  • Ubuntu dispone di un sistema di notifica che è ansible triggersre con notify-send .

     notify-send "Job finished!" 
  • KDE utilizza kdialog , ad esempio:

     kdialog --passivepopup 'Job finished' 

Sui sisthemes simili a unix è ansible suonare la segnalazione acustica:

 echo -e "\a" 

Ho creato uno strumento semplice, per MacOS X, che fa proprio questo. https://github.com/vikfroberg/brb

Installazione

 $ npm install -g brb 

Istruzioni

 $ sleep 3; brb 

Ho appena iniziato a utilizzare notifu per le notifiche desktop da Cygwin. È un'applicazione di notifica di row di command per Windows.

Esempio:

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

Per Linux, c'è un grande trucco per farlo automaticamente senza wherer scrivere un command per la notifica each volta.

Prima di installare autokey. Ciò aiuta a definire azioni per differenti tasti.

 sudo apt-get install autokey-gtk 

Ora, definire una nuova frase in autokey e assegnare il hotkey come Alt + Enter. Aggiungi questa frase:

 ; notify-send "Job finished!" & # 

Si noti che una nuova linea dopo la prima row è importnte.

Inoltre, aggiungere un filter di window. Io uso il guake e il terminal. Includere qualunque altro terminal che utilizzi.

 .*(guake)|(Terminal).* 

Hai finito!!

Ora, each volta che hai bisogno di ricevere notifiche per un command, eseguirlo usando Alt + Enter invece di Enter / Return.

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

Anche se altre risposte hanno già coperto la maggior parte dei modi per ricevere notifiche su un lavoro finito, voglio dare i miei due centesimi dal momento che hai inserito la tua domanda nel seguente formato:

Il luogo in cui lavoro a ha comandi che richiedono molto tempo per eseguire.

Ho lo stesso problema. A volte qualcosa può funzionare per 15 minuti.

Ho la seguente function nel mio .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 } 

Questo utilizza l'applicazione Pushover per spingere una notifica al mio telefono. In questo modo posso andare a pranzo o entrare in una riunione e ricevermi ancora notizie sui lavori che ho iniziato sul mio computer prima di partire.

Lo uso nel modo seguente:

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

Quindi, se il command restituisce un codice di output corretto, verrà eseguita la prima spinta. Su un errore verrà eseguita la seconda.

Ofc è necessario creare un utente a Pushover e registrare un'applicazione per submit notifiche da https://pushover.net/

spero che questo ha aiutato!

Per get una notifica sonora è ansible utilizzare spd-say "Some text" . Esempio:

 some-command; spd-say "Yo" 

Ho scritto ntfy per questo scopo. È cross-platform e può submit automaticamente notifiche quando i comandi a lungo termine finiscono.

Se hai pip di Python (la maggior parte delle distribuzioni Linux e MacOS lo hanno), ecco come installarlo e abilitare le notifiche automatiche:

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

Controlla fuori all'indirizzo http://ntfy.rtfd.io

Oltre a ciò, può anche:

  • annullare le notifiche automatiche quando il terminal è in primo piano (X11, iTerm2 & Terminal.app supportto e abilitato per impostazione predefinita)
  • submit notifiche basate su cloud (Pushover, Pushbullet e XMPP)
  • essere utilizzato per submit notifiche quando un process termina (non il suddetto supporto automatico)
  • submit manualmente le notifiche (buone per l'utilizzo negli script!)

Se si utilizza csh o tcsh come shell interattivo, è ansible utilizzare il command di notify :

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

È ansible get un effetto simile in bash con set -b o set -o notify .

Questo probabilmente non soddisfa le tue esigenze, perché tutto ciò che fa è printingre un messaggio; Non credo che possa essere configurato per aprire una window o suonare la campana.

Sui sisthemes con 'awk' provare

 awk 'BEGIN{ print "\a" }' 

era l'unico a lavorare per me.

Se si utilizza npm nodo-notificatore fornisce una soluzione cross-platform .

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

Anteprima

  • Linux KDE

Linux KDE

  • windows

finestre

  • Mac OS

Mac

  • Ringhiare

Ringhiare

Vorrei aver notato questo thread anni fa. La mia soluzione era sostanzialmente la stessa di slhck, ma ho scritto uno script. Io lo uso per tutto il tempo. Inserisci qui per condividerlo.

 #!/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 

Un piccolo pezzo di spiegazione: la string "\x1b]0;$msg\a" è la sequenza di escape di ANSI per mettere il messaggio nella barra del titolo della window da cui è stata eseguita. A volte mi sembra abbastanza utile per poter vedere quale window proveniva dal messaggio.

Quindi questo arriva abbastanza tardi, ma ho iniziato ad usare un sistema per fare questo: ho uno script bash che esegue qualunque command sia passato ad esso successivamente

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 # [email protected] executes whatever command is typed after the filename [email protected] notify-send "Task Completed" 

e poi semplicemente prepend a n

 n bundle install n npm install