[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Allow tail to display data after stream stops sending input after N
From: |
konsolebox |
Subject: |
Re: Allow tail to display data after stream stops sending input after N seconds |
Date: |
Mon, 25 Apr 2022 22:32:19 +0800 |
On Mon, Apr 25, 2022, 20:45 Pádraig Brady, <P@draigbrady.com> wrote:
> On 24/04/2022 11:45, konsolebox wrote:
> > But this could work if there exists an option like -S which allows
> > tail to wait for N seconds before considering input as "stopped" and
> > then displaying currently absorbed input.
> >
> > Current workaround would be to use a temporary file and use sleep or
> > maybe some repeated inotify checks before running second tail but it's
> > messy.
>
> I'm not sure we need a separate option for this.
> tail(1) will promptly act upon closed input,
> so we can organize to close input upon a count
> (with head -n, or grep -m), or after a time with timeout(1).
>
> How about:
>
> timeout 10 \
> tail -f /var/log/messages -n +1 |
> grep -e something |
> tail
>
> If that didn't suffice, you could organize things to
> get the pid of a sleep process to pass to tail's --pid option:
>
> sleep 10 & sleep_pid=$!
> tail --pid=$sleep_pid -f /var/log/messages -n +1 |
> grep -e something |
> tail
>
But the goal here is not to terminate "tail -f" after a few seconds but
limit filtered output to 10 lines and still keep reading incoming messages.
If you mean that another `tail -f | grep` should run after first set
terminates, ensuring proper continuity if even possible would still be
difficult, and it will not work on streams.
So far this is how I do it and it's awkward:
tail -f /var/log/messages -n +1 | grep -e something > temp & pid=$!
inotifywait -mqq -t 1 temp
tail -f --pid="$pid" temp
rm temp
--
konsolebox
Re: Allow tail to display data after stream stops sending input after N seconds, Kaz Kylheku, 2022/04/26
Re: Allow tail to display data after stream stops sending input after N seconds, Kaz Kylheku, 2022/04/27