Como você faz seu terminal tocar um som ou oferecer uma notificação quando terminar de executar seu comando? [duplicado]

9

Eu faço sudo apt-get update de vez em quando, e acho frustrante ter que verificar quando isso é feito. Existe alguma maneira que eu possa conseguir isso para oferecer um popup de notificação ou reproduzir um som quando ele terminar a execução, para que eu possa continuar com o meu trabalho?

    
por Akiva 21.04.2015 / 05:50

5 respostas

2

Eu escrevi alguns pequenos scripts para fazer isso. O script está localizado em github .

Aqui está o guia de instalação:

Instalação

Download ou apenas clone repo

 $ git clone [email protected]:c0rp-aubakirov/notify_after_command_executed.git

Em seguida, adicione a fonte do script postexec_notify ao seu .bashrc .

Aqui está o exemplo git clone da instalação:

 $ cd ~
 $ git clone [email protected]:c0rp-aubakirov/notify_after_command_executed.git
 $ cd ~/notify_after_command_executed
 $ echo "source $(pwd)/postexec_notify" >> ~/.bashrc

Agora reinicie seu terminal. Após o reinício, você verá estas mensagens:

preexec.sh is not exist
Trying to download it from github

Agora tente testar se a notificação aparece:

$ sleep 6

Por favor, deixe-me saber se algo não está claro ou se você tem algum problema.

    
por c0rp 21.04.2015 / 23:19
16

Som que não posso ajudá-lo. No entanto, se você acrescentar algo como

  && notify-send "Task complete."

após o seu comando, você deverá ver uma notificação no canto superior direito. Se o pacote necessário não for instalado por padrão, sudo apt-get install libnotify-bin deve obtê-lo para você. O && executará um segundo comando se o primeiro concluir com êxito.

    
por Marc 21.04.2015 / 06:07
7

O que você quer é sudo apt-get update; alert . O que segue é explicação e lógica.

  • No terminal, você pode listar muitos comandos para serem executados em sequência. Então, o que você quer é primeiro o comando que leva um longo tempo, e segundo um comando de notificação.
  • Para executar comandos em sequência, separe-os com && ou ; . Eles têm dois significados distintos: command-a && command-b significa que o comando-a será executado primeiro e, em seguida, se tiver êxito , o comando-b será executado; command-a; command-b significa que o comando-a será executado primeiro e, em seguida, o comando-b será executado, se o comando-a foi bem-sucedido . Você provavelmente deseja o ponto-e-vírgula: deseja ser notificado quando a atualização ou a atualização deixar de ser executada, independentemente de ter saído com êxito ou não.
  • Outros respondentes deram a você sugestões de áudio e alertas na tela. Minha preferência é por notify-send , que aceita dois parâmetros: um título e um conteúdo: sudo apt-get update; notify-send update finished (se um dos parâmetros contiver espaços, coloque-os entre aspas).
  • Muito mais rápido e fácil de digitar do que notify-send title content é alert . Esse alias está embutido no bash por padrão em pelo menos algumas versões do Ubuntu, e é fácil o suficiente para adicionar se ele estiver faltando no seu (use type alert para verificar se ele está presente). Você deve receber a resposta,

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

    Isso significa que ele simplesmente extrairá o último comando e o enviará para notify-send , e o ícone correspondente será uma imagem de um terminal (para um comando bem-sucedido) ou uma imagem de erro (para um comando com falha) .

    A vida tornou-se ainda mais simples: command; alert é muito rápido e fácil de digitar. Ele alertará se o comando foi ou não bem-sucedido e o alerta conterá uma indicação de que o comando foi ou não bem-sucedido.

Por acaso, ocasionalmente me incomodou não conseguir canalizar a saída para notify-send , então escrevi uma pequena função para fazer isso por mim:

notify () 
{ 
    while read input; do
        notify-send -i $(ls /usr/share/icons/gnome/32x32/emotes | sed 's/\(.*\)\..*//' | shuf -n1) "message" "$input";
    done
}

Isso me permite digitar command | notify . O ícone neste caso é aleatório, no entanto. Além disso, você recebe uma notificação para cada linha de saída, o que provavelmente não é uma boa escolha para apt-get update .

    
por TRiG 21.04.2015 / 12:07
3

Para arquivos compatíveis com aplay

Para reproduzir um som personalizado pelos alto-falantes, você pode executar

aplay <path_to_sound_file>

* < path_to_sound_file > = caminho para o arquivo de som

para reproduzir o arquivo de som escolhido; você pode adicionar um playsound alias a ~/.bashrc :

alias playsound='aplay <path_to_sound_file>'

* < path_to_sound_file > = caminho para o arquivo de som

Dessa forma, você pode executar sudo apt-get update && playsound para reproduzir o som escolhido quando sudo apt-get update terminar de ser executado.

Para arquivos não compatíveis (por exemplo, arquivos .ogg) (sons do sistema)

Para reproduzir um som personalizado pelos alto-falantes, você pode executar

pacmd list-sinks | grep -E 'index|device.product.name'

para listar todos os índices de sumidouros disponíveis de pulseaudio junto com seu dispositivo correspondente; então você pode correr

pacmd play-file /usr/share/sounds/ubuntu/stereo/bell.ogg <sink_index> > /dev/null

* < sink_index > = índice de afundamento de pulseaudio

para reproduzir /usr/share/sounds/ubuntu/stereo/bell.ogg no coletor escolhido. (Claro que você pode tocar qualquer som que quiser); você pode adicionar um playsound alias a ~/.bashrc :

alias playsound='pacmd play-file /usr/share/sounds/ubuntu/stereo/bell.ogg <sink_index> > /dev/null'

* < sink_index > = índice de afundamento de pulseaudio

Dessa forma, você pode executar sudo apt-get update && playsound para reproduzir o som escolhido quando sudo apt-get update terminar de ser executado.

    
por kos 21.04.2015 / 09:48
1

Você pode adicionar algo como

&& echo -e "
sudo apt-get update && sudo apt-get -y upgrade && echo -e "
&& echo -e "
sudo apt-get update && sudo apt-get -y upgrade && echo -e "%pre%7"
7"
7"
7"

até o final da sua linha. Tente fazer

%pre%

Espero que ajude

    
por Terrance 21.04.2015 / 06:12