【问题标题】:how to refresh the variable output in multiple lines without screen clear如何在不清除屏幕的情况下刷新多行变量输出
【发布时间】:2019-10-05 21:43:30
【问题描述】:

我正在尝试监视一个日志文件,然后显示特定请求调用的计数,输出将显示标题行,其中包含每个请求的名称“PUT GET HEAD”,并且低于每个节点的请求计数每行。 我需要刷新显示每 1 秒计数的变量的输出

以下代码的问题,脚本不断删除前面的行并上升到屏幕顶部,而输出应该是固定的,只有请求的数量应该刷新

#!/usr/bin/bash

#variables
MYIP=$(ifconfig eth1|grep -w 'inet'| awk '{print $2}')
BASEIP=$(echo $XIP | cut -d"." -f-3)

MONPUT=$(cat $HTTPLOG  | grep -w "PUT" |awk '{print $9}'| grep -E "20"| wc -l)
MONHEAD=$(cat $HTTPLOG  | grep -w "HEAD" | awk '{print $9}'| grep -E "20" |wc -l)
MONGET=$(cat $HTTPLOG  | grep -w "GET" | awk '{print $9}'| grep -E "20" |wc -l)
MONDEL=$(cat $HTTPLOG  | grep -w "DELETE" | awk '{print $9}'| grep -E "20" |wc -l)


# header 
printf "%15s" "Node " |tr '\n' '\t'
printf "%15s"  'PUT'  | tr '\n' '\t'
printf "%15s" 'HEAD' | tr '\n' '\t'
printf "%15s"  'GET'  | tr '\n' '\t'
printf "%15s"  'DELETE'  | tr '\n' ' '

# starting the loop

while [[ true ]]
do 
i=(1)

for (( x=1; x<=3; x++))
do 
((i = i + 1))
NODEIP="$BASEIP.$i"
ssh $NODEIP printf "%15s" "$GETNAME" "$MONPUT" "$MONHEAD" "$MONGET" "$MONDEL"
done

echo -ne "\033[3A\r"
done

这是预期的输出:

节点 PUT - HEAD - GET - DELETE 节点2 1849 2183 41387 0

#

节点 3 5339 8534 40838 0

#

节点 4 1829 2196 46503 0

#

预期输出:数字每 1 秒刷新一次时,应显示与上述相同

【问题讨论】:

  • 我的东西 ncurse 会很好地完成这项工作。

标签: bash refresh file-monitoring


【解决方案1】:

我同意 UtLox 的观点,一般来说,ncurses 是您的最佳选择。考虑到这一点,请查看bashsimplecurses

Git repo

Tutorial

Basic example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多