Como encerrar um aplicativo cli quando o stdout contém uma determinada string?

1

Eu tenho um aplicativo de linha de comando que gera muitas informações para o stdout.

Como posso terminar o programa quando o stdout contém uma determinada string?

por exemplo. algo como:

my_program | terminate_if_contains ERROR

A razão pela qual eu quero fazer isso é porque o programa é escrito por terceiros e gera muitos ERROS para o stdout, mas eu quero parar no primeiro erro, então não preciso esperar até que o programa termina.

    
por Brad Parks 16.06.2016 / 21:03

2 respostas

1

Tente:

my_program | sed '/ERROR/q'

Isto imprime tudo até e incluindo a primeira linha contendo ERROR . Nesse momento, sed desiste. Logo em seguida, my_program receberá um sinal de cano quebrado (SIGPIPE) que faz com que a maioria dos programas pare.

    
por 16.06.2016 / 21:21
1

Esta é minha solução rápida para este problema:

Exemplos de uso:

$ watch_and_kill_if.sh ERROR my_program

watch_and_kill_if.sh

#!/usr/bin/env bash

function show_help()
{
  IT=$(CAT <<EOF

  usage: ERROR_STR YOUR_PROGRAM

  e.g. 

  this will watch for the word ERROR coming from your long running program

  ERROR my_long_running_program
EOF
  )
  echo "$IT"
  exit
}

if [ "$1" == "help" ]
then
  show_help
fi
if [ -z "$2" ]
then
  show_help
fi

ERR=$1
shift;

$* |
  while IFS= read -r line
  do
    echo $line
    if [[ $line == *"$ERR"* ]]
    then
      exit;
    fi
  done

    if [ "$1" == "help" ]
    then
      show_help
    fi
    if [ -z "$2" ]
    then
      show_help
    fi

    ERR=$1
    shift;

    $* |
      while IFS= read -r line
      do
        echo $line
        if [[ $line == *"$ERR"* ]]
        then
          exit;
        fi
      done
    
por 16.06.2016 / 21:20

Tags