Linux

輸出下方的 Bash 提示 - 後台日誌尾部

  • September 13, 2013

我曾經為一家公司工作,該公司有一個定制的 shell 來管理他們在 Linux 上執行的產品之一,我希望複製這個 shell 的一個關鍵特性。

所有工作都由後台程序完成,日誌的輸出顯示給所有連接的使用者。

日誌將在後台拖到您的 shell 中,提示行將始終完美地停留在底部。

例如

Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #

我嘗試使用 bash 執行此操作的方法是在使用者 .bashrc 文件中啟動一個分離的尾部,但是當命令的輸出發送到標準輸出時 - 它在 bash 提示符下出現,例如

![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3

並且使用者必須按輸入鍵或Ctrl``C一個乾淨的提示行。

我不知道如何使提示始終跳到輸出的底部,並且我認為我使用錯誤的術語在 Google 上查找任何內容,因為我沒有運氣 - 有誰知道該怎麼做用重擊?

以下是您需要的,無需使用 tmux 或 screen 或其他程序。將提示保留在底部。用您需要的任何文件替換“/var/log/cron”:

#!/bin/bash 
L=$(tput lines)
L1=${L}
(( L1-- ))
C=$(tput cols)
tput cup ${L} 0
tail -f /var/log/cron | while read line; do 
 tput sc
 printf "\e[1;${L1}r\e[${L1};${C}f" 
 echo; echo ${line}
 printf "\e[1;${L}r" && tput rc
done

關鍵是終端的 ANSI 控製字元。特別是設置新的可滾動區域的“\e[x;y”語句。因此,在讀取日誌文件的每一行時,視窗中的底行被排除在可滾動區域之外,日誌文件中的行被插入,然後底部被添加回來。

引用自:https://serverfault.com/questions/528993