為什麼透過管道傳輸指令時「slabtop -o」只回傳前 23 行?

為什麼透過管道傳輸指令時「slabtop -o」只回傳前 23 行?

我試圖解析slabtop -owith awk 的輸出來計算快取大小的總和,但是當輸出通過管道傳輸時,它只會傳回前 23 行。我在 Ubuntu 和 Centos 上嘗試過這個。

# slabtop --version
slabtop from procps-ng 3.3.10
# slabtop -o | wc -l
23

為什麼當命令通過管道傳輸時它只返回前 23 行?

答案1

slabtop, 即使-o總是將自己限制為一螢幕輸出。它通常透過詢問終端它的大小是多少來實現這一點,但是當它的標準輸出不是終端時,假設螢幕為 80 列 x 24 行並且僅輸出 23 行(以避免任何滾動)。

由於已經修復,該修復出現在procps-ng3.3.13 及更高版本中。

答案2

當輸出不是終端時,它只是硬編碼以這種方式工作。

如果您仍然想使用重定向並獲取更多行,您可以使用script欺騙slabtop來認為它的輸出正在列印到終端。您可以stty在此基礎上新增更改偽終端參數並設定您自己的輸出線限制。

# slabtop -o | wc -l
23
# script -q -c "slabtop -o" /dev/null | wc -l
46
# script -q -c "stty rows 999; slabtop -o" /dev/null | wc -l
147

或者,您可以直接從/proc/slabinfo文件中獲取信息,該文件slabtop本身也可以使用。

相關內容