Como sinalizar a presença de um padrão via código de saída, sem alterar o STDOUT

3

Eu preciso executar cmd1 . Se e somente se PATTERN estiver faltando em seu STDOUT, eu preciso executar cmd2 também:

cmd1 | grep "$PATTERN"  ||  cmd2

Mas eu gostaria de ver a saída all do cmd1, não apenas as linhas que correspondem ao PATTERN.

Eu sei que posso fazer algo assim:

OUTPUT='cmd1'
echo "$OUTPUT"
echo "$OUTPUT" | grep -q "$PATTERN"  ||  cmd2

mas isso separaria STDOUT de STDERR. Também prefiro ter um one-liner à mão. Então estou procurando uma opção no grep, ou uma alternativa ao grep, dizendo " Não filtre, apenas configure o código de saída ".

    
por Nils Toedtmann 23.03.2017 / 12:49

1 resposta

2

Como usar tee para enviar a saída para o tty assim:

cmd1 | tee /dev/tty | grep "$PATTERN"  ||  cmd2

Exemplo com a saída PATTERN matching cmd1 :

% echo "cmd1 output" | tee /dev/tty | grep -q "output" || echo "nothing matches PATTERN"
cmd1 output

Exemplo com PATTERN não correspondendo à saída de cmd1 :

% echo "cmd1 output" | tee /dev/tty | grep -q "outputttt" || echo "nothing matches PATTERN"
cmd1 output
nothing matches PATTERN
    
por 23.03.2017 / 17:18