2015-09-04 113 views
0

后,我发现了一个实时跟踪dmesg命令输出的解决方案。解决方案是here继dmesg命令输出

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

它的工作原理。但我想明白为什么$((LINES-6))正常工作而不是$ LINES。

谢谢。

+0

你确定$行不工作?我看到它的工作。 –

+0

我比较了“watch -n 0.1”dmesg |在Ubuntu上使用tail -n $ LINES“”和“dmesg”命令。 $ LINES会丢失最后6行输出。 – LZh

+0

我刚刚检查了将USB插入PC的情况。 – LZh

回答

0

$(($LINE - 6))减去6到$LINE的值并返回结果。

编辑:使用bash(和其他proabably壳)

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提供给线和列数。

+0

你能告诉我$ LINE的价值来自哪里吗?我找不到关于它的信息。 – LZh

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))"