Linux
輸出下方的 Bash 提示 - 後台日誌尾部
我曾經為一家公司工作,該公司有一個定制的 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”語句。因此,在讀取日誌文件的每一行時,視窗中的底行被排除在可滾動區域之外,日誌文件中的行被插入,然後底部被添加回來。