tail a log util keywords found or timeout
You could do something like:
sh -c 'echo "$$"; exec tail -f file' | (
IFS= read -r pid
timeout 60 sed "/$keyword/q"
kill -s PIPE "$pid"
)
Unless you have enabled the pipefail
option, that will exit with the exit status of kill
which should be 0 unless tail
has exited of its own (which shouldn't happen in practice).
With pipefail
, that would exit with the exit status of tail
killed by a SIGPIPE, (which most shells represent with a value of 141). You can always append a || true
to force a success exit status.
See also:
- How to exit early on pipe close?
- Grep slow to exit after finding match?
- make tail -f exit on a broken pipe