skip to Main Content

I’m running from bash script something like

$(command -options)&
export SC_PID=$!    
if tail -f <log_filename.txt> | grep --line-buffered -E "(some expression)"; then
        kill -STOP $SC_PID
fi

but it’s writing "(some expression)" in the command line output instead of killing the process. Note that log_filename.txt is a log file where’s being written output from $(command -options) in real time. What am I doing wrong?

2

Answers


  1. Your pipe (tail -f ... | grep ...) will never end.

    Add -m 1 to your GNU grep to exit after first match.

    Login or Signup to reply.
  2. your if statement with "tail -f" can’t finished until you break it, so it just can’t move to next step. try to split text by lanes, like the following:

    $(command -options)&
    export SC_PID=$!    
    tail -f <log_filename.txt)|while read; do
      if (echo "$REPLY"|grep --line-buffered -E "(some expression)"); then
        kill -STOP $SC_PID
      fi
    done
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search