Estou testando o aplicativo executando mycommand
a saída no console e diretamente em /tmp/mycommand.log. Usar zsh. mycommand
é, na verdade, uma função com parâmetros, mas consigo obter o mesmo resultado executando no console. mycommand
O comando é executado enquanto testo o aplicativo no navegador. Ao terminar, pressiono Ctrl+C para finalizar a execução.
Pode ocorrer um erro no programa, que retorna no console como " ERROR: Fatal signal! Attach debugger with:
Como não estou olhando para o console e isso não está no log, gostaria de receber uma notificação quando isso acontecer". É necessário um simples som de error
, não deve ler a longa saída do log do aplicativo.
Eu estava olhando Como exibir a saída do comando e também analisá-la?, mas isso não parece se aplicar aqui da mesma forma.
Para mint/ubuntu você pode usar
espeak
(apt install espeak
).O comando seria simplesmente:
para usuários do macOS, há um
say
comando nativo que tem funcionalidade semelhante.Se você não quiser instalar nenhum pacote adicional e estiver satisfeito apenas com um som de alerta, você pode usar o caractere de sino
\a
:Se você quiser analisar a saída dos comandos e também alertar sobre a presença da
ERROR
string, você pode fazer:Pelos comentários do OP, parece que toda
mycommand
a saída vai parastderr
... talvez. O OP também esclareceu quemycommand
está gravando diretamente no arquivo de log.Vou assumir que não sabemos, com certeza, se a saída será stdout, stderr ou uma mistura.
Para fins de demonstração, usarei o seguinte:
Uma abordagem que usa redirecionamento para dividir a saída (para monitorar e dar continuidade ao processamento) e
grep
encontrar as linhas que desejamos alimentarespeak
:NOTAS:
mycommand
para enviar saída para stdout, stderr ou uma mistura de stdout/stderr...ERROR <pause> had a problem
nos meus alto-falantes quando a linhaERROR: had a problem
foi impressa no terminaltee /dev/tty
- garante que todos os dados que chegam no stdout sejam copiados para o terminal antes de serem canalizados paragrep
2>&1
- garante que todos os dados que chegam no stderr sejam redirecionados para o stdout (o que significa que o stderr também é roteado pelotee /dev/tty | grep ... | espeak
pipeline)grep
é usado para extrair apenas as linhas que desejamos passar paraespeak
; se estiver procurando por várias strings, você provavelmente precisará habilitar o suporte estendido a regex (por exemplo,grep -E ...
)--line-buffered
é umaGNU grep
extensão que garante que ouçamos aespeak
saída ao mesmo tempo em que vemos aERROR:
linhaespeak
viasudo apt install espeak
espeak
por qualquer programa de produção de som que desejarEsta solução (acima) falará a linha inteira quando a linha contiver a string
^ERROR:
.Se o OP deseja falar apenas uma única palavra
ERROR
sempre que a stringERROR
for vista em qualquer lugar da linha:Permitir correspondência sem distinção entre maiúsculas e minúsculas na string
ERROR
em qualquer lugar da linha enquanto se fala apenas uma única palavraerror
:Falando apenas a palavra
error
ouwarning
quando há uma correspondência que não diferencia maiúsculas de minúsculas nas stringsERROR
e/ouWarning
na linha:Modificando
mycommand
para gerar as seguintes linhas:O seguinte é enviado
Danger Will Robinson
ao alto-falante (máximo de uma vez por linha de entrada) sempre que houver uma correspondência sem distinção entre maiúsculas e minúsculas nas stringsERROR
ouwarning
:Você pode adicionar um gancho para ser executado depois que um programa iniciado pelo zsh for concluído, pouco antes do próximo prompt de linha de comando ser impresso, para evitar que seu processo saia com um erro:
Você pode fazer coisas como inserir pipes na saída padrão (como o Jesse recomenda), mas isso pode alterar o comportamento do seu programa e geralmente não é o que você deseja fazer. Mas, com certeza, você pode combinar a abordagem do Jesse com esta.