在输出dmesg命令之后

时间:2015-09-04 04:45:26

标签: linux unix command watch tail

我找到了一个实时跟踪dmesg命令输出的解决方案。解决方案是here

watch -n 0.1 "dmesg | tail -n $((LINES-6))"

有效。但我想了解为什么$((LINES-6))正常工作而不是$ LINES。

谢谢。

3 个答案:

答案 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由您xtermputty提供,以提供LINES和COLUMN编号。

答案 2 :(得分:0)

  

我想了解为什么$((LINES-6))正常工作而不是   $ LINES。

原因分为两部分。

  1. watch会显示一个标题后跟一个空行,因此您需要从可用的屏幕行数中减去2(或使用-t选项关闭标题)。
  2. dmesg输出的某些行长于屏幕宽度,因此占用多个屏幕行。由于tail -n没有考虑到这一点,而是计算逻辑行而不管其长度如何,它可以在屏幕上提供比要求更多的行,并且watch仅显示其中的第一个屏幕,丢失其余的(在你的测试用例中为4)。为了解决这个问题,您可以将dmesg行换行以适应屏幕宽度,然后再将其输入tail -n,例如:

    watch "dmesg | fold -w$COLUMNS | tail -n$((LINES-2))"