当stdout包含某个字符串时,如何终止cli应用程序?


1

我有一个命令行应用程序,可以将大量信息输出到stdout。

当stdout包含某个字符串时,如何终止程序?

例如:

my_program | terminate_if_contains ERROR

我之所以要这样做,是因为该程序是由第三方编写的,并且向stdout输出很多错误,但是我想在第一个错误时停止,因此我不必等到程序完成。

Answers:


1

尝试:

my_program | sed '/ERROR/q'

这将打印所有内容,直到包含的第一行为止ERROR。此时,sed退出。此后不久,my_program将收到中断管道信号(SIGPIPE),这将导致大多数程序停止。


1
太好了!我不知道该/q选项...太酷了!
布莱德·帕克斯

1

这是我对这个问题的快速解决方案:

用法示例:

$ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.