Execute outro comando se houver alguma entrada na entrada padrão

1

Como posso executar outro comando se houver alguma entrada na entrada padrão

comumente usado em situações como esta:

algum comando sem saída normal | ifinput mail -s 'some output' me

    
por ckliborn 15.07.2011 / 16:53

3 respostas

2

A solução mais simples seria usar um arquivo (se você ousar!). A opção -s significa "arquivo não é tamanho zero". Os redirecionamentos &> também incluem erros (significa que stdout e stderr serão enviados).

OUTFILE=/tmp/command.out
some command &> $OUTFILE
[ -s "$OUTFILE" ] && mail -s "subject here" [email protected] < "$OUTFILE"

Edit: o comentário abaixo por glenn jackman contém uma solução ainda melhor.

    
por 15.07.2011 / 17:15
3

Um pequeno truque com read :

$ echo 1 | { read -t 0 -N 0 && cat ; } 
1
$ { read -t 0 -N 0 && cat ; } 
$ 
    
por 15.07.2011 / 17:02
1

Você também pode criar um script de shell. Esse script pode primeiro chamar algum comando que redirecione a saída para um arquivo e depois chamar o comando mail a partir do script para enviá-lo, que é essencialmente o que o SamKrieg está fazendo, sem a necessidade de criar um script de shell. Uma razão para o script pode depender se você deseja executar este comando como uma tarefa cron ou somehting.

    
por 15.07.2011 / 18:48