2015-09-04 117 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))"