我曾经为一家拥有自定义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
而用户将不得不按下input或Ctrl C的干净的提示行。
我不知道如何使提示总是跳转到输出的底部,我想我使用错误的术语来find谷歌上的任何东西,因为我没有运气 – 有谁知道如何做到这一点与bash?
以下是您所需要的,不使用tmux或屏幕或其他程序。 保持底部的提示。 用你需要的任何文件replace“/ 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
关键是terminal的ANSI控制字符。 特别是设置新的可滚动区域的“\ e [x; y”语句。 因此,当读取日志文件的每一行时,窗口的底线将从可滚动区域中排除,插入日志文件中的行,然后将底部添加回来。
答案是屏幕或tmux已被使用
我将解释如何使用屏幕来configuration
1)使用Ubuntu / Debian上的apt-get install screen
或yum install screen
RedHat衍生yum install screen
。
2) screen -S shell_and_logs
3)然后按Ctrl + a ,然后按S
(大写字母S)。
将出现一个水平屏幕
4)按Ctrl + a,然后按Tab键
这将跳转到第二个分割窗口。
5)在这里创build另一个窗口,所以你通过按Ctrl + a释放键,然后按c
获得命令提示符
6)你可以通过按Ctrl + a来改变第二个窗口的大小,然后键入:resize
之后显示Lines:
input你想要显示的行数。
7)最后,您可以通过Ctrl + a和TAB切换窗口