我找到了一个实时跟踪dmesg命令输出的解决方案。解决方案是here。
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
有效。但我想了解为什么$((LINES-6))正常工作而不是$ LINES。
谢谢。
答案 0 :(得分:1)
dmesg已经具有此功能。您可以使用此:
dmesg -w
答案 1 :(得分:0)
$(($LINE - 6))
将6减去$LINE
的值并返回结果。
编辑:
使用bash时(可能是其他shell)
LINES Used by the select compound command to determine the column
length for printing selection lists. Automatically set if the
checkwinsize option is enabled or in an interactive shell upon
receipt of a SIGWINCH.
简而言之,LINES由您xterm
或putty
提供,以提供LINES和COLUMN编号。
答案 2 :(得分:0)
我想了解为什么$((LINES-6))正常工作而不是 $ LINES。
原因分为两部分。
watch
会显示一个标题后跟一个空行,因此您需要从可用的屏幕行数中减去2(或使用-t
选项关闭标题)。 dmesg
输出的某些行长于屏幕宽度,因此占用多个屏幕行。由于tail -n
没有考虑到这一点,而是计算逻辑行而不管其长度如何,它可以在屏幕上提供比要求更多的行,并且watch
仅显示其中的第一个屏幕,丢失其余的(在你的测试用例中为4)。为了解决这个问题,您可以将dmesg
行换行以适应屏幕宽度,然后再将其输入tail -n
,例如:
watch "dmesg | fold -w$COLUMNS | tail -n$((LINES-2))"