Estou usando o Ubuntu 16.04 LTS. Existe um alias no my .bashrc
que usa notify-send
:
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$//'\'')"'
Posso anexar alert
a outros comandos como somecommand; alert
ou somecommand && alert
e receber uma notificação pop-up após a somecommand
conclusão (com sucesso). Isso me lembra que o comando que executei em uma janela do Terminal que agora está minimizado ou em um espaço de trabalho diferente terminou de ser executado.
Mas eu quero um alerta semelhante quando ele espera por uma entrada do usuário em vez de conclusão (por exemplo, prompt Sim/Não). Como eu posso fazer isso?
O uso de soluções análogas notify-send
seria ótimo, mas outra alternativa relativamente simples também seria boa.
Caso haja uma confusão, não pretendo criar uma resposta automática ao prompt. Eu só quero que me lembre de janelas de terminal esquecidas (minimizadas/em diferentes áreas de trabalho) enquanto executam comandos com saída longa que podem solicitar entrada do usuário (por exemplo apt update && apt upgrade
, ).
Monitorar o diálogo de um programa e enviar um alerta
Você pode monitorar a atividade de
xterm
arquivo de log , agora com um modo interativoe deixá-lo iniciar uma
zenity
mensagem de informação , quando houver entrada do programa monitorado. Se desejar, você também pode instalarespeak
e deixá-lo enviar uma mensagem de áudio .1. Inicie uma
zenity
mensagem informativa, quando houver entrada de um programa monitorado usando um fifo.O shellscript a seguir pode monitorar o diálogo de saída de um programa e enviar um alerta.
wrapper
xterm
janelaxterm
janela (é onde você escreve sua entrada)/dev/stdout
edev/stderr
.while
loopzenity
janela de mensagem informativa.Espera-se que você feche a
zenity
janela (pode trabalhar com 'Enter') para voltar àxterm
janela, onde você escreve sua entrada.Você pode querer correr
espeak
pertozenity
para receber uma mensagem de áudio também. Nesse caso, você pode remover o#
caractere no início dessa linha. (Pode haver muito texto do programa, então geralmente é uma má ideia redirecionar o fifo paraespeak
. É melhor redirecionar o fifo paracat
e imprimi-lo no 'console'.)Demonstração
Você pode testar algumas linhas de comando com
cp -i
emv -i
e você pode testar com o seguinte pequeno shellscriptprogram
,Texto de ajuda:
Monitoramento
program
:zenity
janela de mensagem de informação:Diálogo na
xterm
janela:Saída 'Console' na janela do terminal original após terminar:
Monitoramento
cp -ip
:zenity
janela de mensagem de informação:Diálogo em
xterm
:Monitoramento
sudo parted /dev/sdc
:Diálogo em
xterm
:2. Iniciar uma
zenity
mensagem informativa, quando algo é escrito em umaxterm
janela (do programa monitorado ou do usuário).O shellscript a seguir pode monitorar o diálogo com um programa e enviar um alerta.
wrapper
xterm
janelaxterm
janela (é onde você escreve sua entrada)xterm
para obter acesso à saída e entrada do programa a ser monitoradowhile
loopzenity
janela de mensagem informativa.Espera-se que você feche a
zenity
janela (pode trabalhar com 'Enter') para voltar àxterm
janela, onde você escreve sua entrada.Agora existe um modo interativo, onde você usa a
xterm
janela da mesma forma que usa qualquer janela de terminal. Feche axterm
janela para interromper o monitoramento.Salve este
bash
código em um arquivo e dê a ele [por exemplo] o nomevialog
, torne-o executável e talvez mova-o para um diretório em seu caminho.Você trabalha na
xterm
janela e o diálogo ecoa na janela inicial também.Convite para feedback
Em vez de adicionar outro shellscript à minha resposta já existente, acho que é melhor com uma segunda resposta. Vou ouvir os comentários e focar no script/método preferido e tentar mesclar o que é preferido em uma resposta (a menos que haja motivos para mantê-los todos (para diferentes propósitos).
Monitorar o diálogo de um programa e enviar um alerta
Você pode monitorar a atividade de
xterm
arquivo de registroe deixá-lo iniciar uma
zenity
mensagem de informação , quando houver entrada do programa monitorado. Se desejar, você também pode instalarespeak
e deixá-lo enviar uma mensagem de áudio .Esta resposta se concentra em uma segunda alternativa usando um fifo .
Start a
zenity
info message, when there is input from a monitored program using a fifo.1.1 Using
xterm
, monitoring standard output and standard error via a fifoThis
wrapper
method has thecp -i
andsudo
.sftp
will lose the prompt, and the user cannot know, when the program is ready for a new task.ssh
.1.2 Using the compiled program
script
and its log file via a fifoThe following shellscript can monitor the output dialogue from a program and send an alert. It needs
espeak
andscript
(script
need not be installed in Ubuntu and Debian).viafifo
.viafifo
'/dev/stdin
,/dev/stdout
anddev/stderr
. The main task in the shellscript is the line with the programscript
, that is monitoring the activity in the terminal window and writing to the fifo.while
loopzenity
info message window and a correspoding spoken message withespeak
.You are expected to close the
zenity
window (can work with 'Enter') to get back to thexterm
window, where you write your input.Digite
exit
para sairscript
eviafifo
. Depois disso, você pode obter um arquivo de log com todo o diálogo.viafifo
é testado comviafifo
neste link .time viafifo
eviafifo.log
.Exemplo de demonstração
Capturas de tela
time viafifo
viafifo.log