【问题标题】:Following the output of the dmesg command在 dmesg 命令的输出之后
【发布时间】:2015-11-30 03:37:17
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 您确定 $LINES 不起作用吗?我看到了它的工作原理。
  • 我比较了“watch -n 0.1”dmesg | Ubuntu 上的 tail -n $LINES"" 和 "dmesg" 命令。 $LINES 会丢失最后 6 行输出。
  • 我刚刚检查了将 USB 插入 PC 的情况。

标签: linux unix command watch tail


【解决方案1】:

$(($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 编号。

【讨论】:

  • 你能告诉我$LINE的价值是从哪里来的吗?我找不到有关它的信息。
【解决方案2】:

我想了解为什么 $((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))"
    

【讨论】:

    【解决方案3】:

    dmesg 已经有这个功能。你可以使用这个:

    dmesg -w
    

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2016-06-03
      相关资源
      最近更新 更多