後,我發現了一個實時跟蹤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