Bash提示低于输出 - 背景日志尾

Modified on: Tue, 20 Aug 2019 05:40:02 +0800

我曾经为一家公司工作过,该公司有一个自定义的shell来管理他们在Linux上运行的一个产品,而我正在寻找复制这个shell的一个关键特性。

所有工作都是由后台进程完成的,日志输出显示给所有连接的用户。

日志会在你的shell的背景中尾随,并且提示行总是完全保持在底部。

例如

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

我尝试用bash执行此操作的方法是在用户.bashrc文件中启动一个分离尾部,但是当命令的输出发送到stdout时 - 它在bash提示符下进入,例如。

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

用户必须按Enter或 Ctrl C 才能获得干净的提示行。

我没有关于如何使提示始终跳到输出底部的想法,我认为我使用错误的术语在Google上找到任何东西,因为我没有运气 - 有没有人知道如何用bash做到这一点?

最佳答案

以下是您所需要的,无需使用tmux或屏幕或其他程序。保持在底部的提示。将“/ 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”语句。因此,当读取日志文件的每一行时,窗口中的底线将从可滚动区域中排除,插入日志文件中的行,然后将底部添加回来。


相关问答

添加新评论