Bash 提示符下方输出 - 背景日志尾部

Bash 提示符下方输出 - 背景日志尾部

我曾经在一家公司工作,该公司有一个定制的 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

用户必须按下回车键或CtrlC按下回车键才能得到干净的提示行。

我不知道如何让提示总是跳转到输出的底部,而且我认为我使用了错误的术语在 Google 上查找任何内容,因为我没有运气 - 有人知道如何用 bash 做到这一点吗?

答案1

以下操作可满足您的需要,无需使用 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”语句,它设置了一个新的可滚动区域。因此,在读取日志文件的每一行时,窗口中的底行将从可滚动区域中排除,然后插入日志文件中的行,最后将底行添加回去。

答案2

答案是使用 screen 或 tmux

我将解释如何使用屏幕进行配置

apt-get install screen1)使用Ubuntu/Debian 或yum install screenRedHat 衍生版本安装屏幕 。

2) screen -S shell_and_logs

3)然后按Ctrl+ a,接着按S(大写 S)。
将出现一个水平屏幕

4) 按Ctrl+a然后按TAB
这将跳转到第二个分割窗口。

Ctrl5)在此处创建另一个窗口,以便通过按下+a释放键然后按来获取命令提示符c

Ctrl6) 您可以通过按+来调整第二个窗口的大小,然后 a输入要显示的行数。:resizeLines:

7)最后,您可以通过 Ctrl+aTAB

参见下面的示例

相关内容