后,我发现了一个实时跟踪dmesg命令输出的解决方案。解决方案是here。继dmesg命令输出
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
它的工作原理。但我想明白为什么$((LINES-6))正常工作而不是$ LINES。
谢谢。
后,我发现了一个实时跟踪dmesg命令输出的解决方案。解决方案是here。继dmesg命令输出
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
它的工作原理。但我想明白为什么$((LINES-6))正常工作而不是$ LINES。
谢谢。
$(($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由你xterm
或putty
提供给线和列数。
你能告诉我$ LINE的价值来自哪里吗?我找不到关于它的信息。 – LZh
我想明白为什么$((LINES-6))正常工作,而不是 $ LINES。
原因有两个部分。
watch
显示一个标题,随后是一个空行,因此,需要从可用屏线的数量中减去2(或使用-t
选项关闭头)。dmesg
的一些行输出比屏幕宽度更长,因此占用多个屏幕行。由于tail -n
没有考虑到这一点,而是计算逻辑行数,而不管它们的长度如何,它可以在屏幕上显示比要求的更多的行,并且watch
只显示其中的第一个屏幕截图,其余(在测试用例中为4)。为了弥补这一点,你可以包装dmesg
线以适应屏幕宽度喂养它们之前tail -n
,例如:
watch "dmesg | fold -w$COLUMNS | tail -n$((LINES-2))"
你确定$行不工作?我看到它的工作。 –
我比较了“watch -n 0.1”dmesg |在Ubuntu上使用tail -n $ LINES“”和“dmesg”命令。 $ LINES会丢失最后6行输出。 – LZh
我刚刚检查了将USB插入PC的情况。 – LZh