Como posso disparar uma notificação quando um trabalho / processo termina?

83

O local em que trabalho tem comandos que demoram muito para serem executados.

Existe um comando / utilitário que eu possa usar para me avisar quando a execução do comando terminar? Pode ser uma janela pop-up ou talvez um pequeno som.

    
por Utkarsh Sinha 11.10.2011 / 22:22

14 respostas

114

Geralmente, se você souber isso antes de executar o comando, basta iniciá-lo com:

command; command-after &

Isso executará o command-after após o comando anterior ter saído (independentemente de seu código de saída). O & irá iniciá-lo em segundo plano.

Se você se importa com uma saída bem-sucedida ou com falha, use:

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

Se o comando já tiver iniciado, você poderá usar o controle de trabalho para suspendê-lo e, em seguida, retorná-lo ao primeiro plano com fg da sua notificação:

command
# enter Ctrl-z
fg ; command-after

Agora ... o que você quer fazer depois disso depende do seu ambiente.

  • Em qualquer sistema , você pode "tocar" a campainha do terminal . Depende do seu sistema exato o que realmente funciona (BSD vs. GNU Linux, etc.), mas tput bel deve fazer. Eu não poderia testá-lo de forma confiável agora, no entanto. Procure por "campainha" para saber mais.

  • No Mac OS X , você pode usar o AppleScript para abrir uma caixa de diálogo do Finder:

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

    Você pode dizer algo para você:

    say "Job finished"
    

    Ou você pode usar o sistema de notificação da Mountain Lion:

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • No GNOME , zenity pode mostrar uma caixa de diálogo do GTK, chamada a partir da linha de comando . Veja também esta pergunta do Stack Overflow: mostrando uma caixa de mensagem de um script bash no linux . Pode ser instalado através do seu gerenciador de pacotes favorito.

    zenity --info --text="Job finished"
    
  • Algumas distribuições podem ter xmessage . Especificamente para ambientes GTK, há gxmessage .

  • O Ubuntu tem um sistema de notificação que você pode ativar com notify-send .

    notify-send "Job finished!"
    
  • O KDE usa kdialog , por exemplo:

    kdialog --passivepopup 'Job finished'
    
por 11.10.2011 / 22:40
19

Em sistemas semelhantes a unix, você pode tocar a campainha audível:

echo -e "\a"
    
por 10.10.2012 / 20:29
8

Eu criei uma ferramenta simples, para o MacOS X, que faz exatamente isso. link

Instalação

$ npm install -g brb

Instruções

$ sleep 3; brb
    
por 08.06.2014 / 12:43
4

Acabei de começar a usar o notifu para notificações na área de trabalho do Cygwin. É um aplicativo de notificação de linha de comando para o Windows.

Exemplo:

ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
    
por 13.09.2013 / 09:21
4

Para obter uma notificação sonora, você pode usar spd-say "Some text" . Exemplo:

some-command; spd-say "Yo"
    
por 15.12.2015 / 18:54
3

Para o Linux, existe um truque bacana para fazer isso automaticamente sem ter que digitar um comando para notificação toda vez.

Primeiro, instale o autokey. Isso ajuda a definir ações para diferentes pressionamentos de teclas.

sudo apt-get install autokey-gtk

Agora, defina uma nova frase no autokey e atribua a tecla de atalho como Alt + Enter. Adicione esta frase:

; notify-send "Job finished!" &
  #

Note que uma nova linha após a primeira linha é importante.

Além disso, adicione um filtro de janela. Eu uso guake e terminal. Inclua qualquer outro terminal que você use.

.*(guake)|(Terminal).*

Você terminou !!

Agora, sempre que precisar receber notificações de um comando, execute-o usando Alt + Enter em vez de Enter / Return.

Fonte: link

    
por 27.12.2014 / 13:39
3

Embora outras respostas já cobrem a maioria das formas de receber notificações em um trabalho concluído, quero dar meus dois centavos desde que você fez sua pergunta no seguinte formato:

The place I work at has commands that take a long time to execute.

Eu tenho o mesmo problema. Às vezes, algo pode ser executado por 15 minutos.

Eu tenho a seguinte função no meu .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
}

Isso usa o aplicativo Pushover para enviar uma notificação ao meu telefone. Dessa forma, posso ir almoçar ou participar de uma reunião e ainda ser notificado sobre os trabalhos que iniciei no computador antes de sair.

Eu uso da seguinte maneira:

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

Portanto, se o comando retornar um código de saída correto, o primeiro push será executado. Em um erro, o segundo será executado.

Você precisa criar um usuário no Pushover e registrar um aplicativo para enviar notificações de link

espero que isso tenha ajudado!

    
por 23.06.2015 / 13:15
3

Eu escrevi ntfy exatamente para esse propósito. É multi-plataforma e pode automaticamente enviar notificações quando comandos de longa duração terminam.

Se você tem o pip do Python (a maioria das distribuições Linux e MacOS o tem), veja como instalá-lo e ativar as notificações automáticas:

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

Confira no link

Além disso, também pode:

  • suprime as notificações automáticas quando o terminal está em primeiro plano (X11, iTerm2 e Terminal.app são suportados e ativados por padrão)
  • enviar notificações baseadas em nuvem (Pushover, Pushbullet e XMPP)
  • ser usado para enviar notificações quando um processo termina (não o suporte automático mencionado anteriormente)
  • enviar notificações manualmente (bom para usar em scripts!)
por 19.05.2016 / 17:44
1

Se você usa csh ou tcsh como seu shell interativo, você pode usar o comando notify :

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

Você pode obter um efeito semelhante no bash com set -b ou set -o notify .

Isso provavelmente não atende aos seus requisitos, já que tudo que faz é imprimir uma mensagem; Eu não acho que pode ser configurado para abrir uma janela ou tocar a campainha.

    
por 11.10.2011 / 23:58
1

Em sistemas com 'awk' try

awk 'BEGIN{ print "\a" }'

foi o único a trabalhar para mim.

    
por 04.09.2015 / 09:23
1

Se você estiver usando npm , então node-notifier forneça uma solução de plataforma cruzada .

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

Visualizar

  • Linux KDE

  • Windows

  • MacOS

  • Growl

    
por 08.01.2016 / 12:44
1

Gostaria de ter notado esse segmento anos atrás. Minha solução era essencialmente a mesma que a do slhck, mas escrevi um roteiro. Eu uso isso o tempo todo. Postando aqui para compartilhar.

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

Uma pequena explicação: a string "\x1b]0;$msg\a" é a sequência de escape ANSI para colocar a mensagem na barra de título da janela a partir da qual ela foi executada. Eu acho bastante útil às vezes para ver de que janela veio a mensagem.

    
por 22.07.2016 / 21:46
1

Então, isso chega bem tarde, mas comecei a usar um sistema para fazer isso: Eu tenho um script bash que executa qualquer comando que é passado para ele depois

link

#!/bin/bash


# file location : /usr/bin/n

set +e


# $@ executes whatever command is typed after the filename

$@


notify-send "Task Completed"

e depois eu simplesmente preenchei n

n bundle install
n npm install
    
por 20.02.2017 / 07:08
0

Outra possibilidade é usar alert , Works no Linux.

>any-command; alert

Dá uma notificação como na imagem. notificação de alerta

    
por 25.11.2017 / 06:08