如何添加 -F 尾部,但仅在最后 5 行中滚动输出

Bra*_*rks 1 bash tail

我希望能够得到tail -F一些输出,但不能让它回滚整个缓冲区,而只能在有限的行数(例如 5 行)内滚动。

我怎样才能做到这一点?

我试过

tail -F -n 5 /tmp/dump

但这似乎不起作用 - 滚动行占据了整个缓冲区

Jon*_*Jon 5

以下解决方案不太漂亮 - 它使用 ANSI 转义序列 - 但我认为它大致可以满足您的需求,而无需使用watch

while true; do
    tail -5 /tmp/dump | cut -c1-80
    printf '\e[5A'
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

该序列\e[5A意味着上升五行。可以5替换为您想要的任何数字。

也就是说,对于这种事情,您最好使用类似诅咒的库。使用原始 ANSI 转义序列是不可移植的。tput可在 Linux 和 Cygwin 中使用。该cuu能力向上移动。

while true; do
    tail -5 /tmp/dump | cut -c1-80
    tput cuu 5
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)