加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – gnu watch:在终端的左下方进行辩护

发布时间:2020-12-15 21:04:20 所属栏目:安全 来源:网络整理
导读:我想每隔N秒对 mysql查询应用一个watch命令,但希望结果在终端的左下角而不是左上角: watch -n 120 "mysql_query" | column -t" 显示我的结果如下: --------------------------|xxxxxxxxxxx ||xxxxxxxxxxx ||xxxxxxxxxxx || || |--------------------------
我想每隔N秒对 mysql查询应用一个watch命令,但希望结果在终端的左下角而不是左上角:

watch -n 120 "mysql_query" | column -t"

显示我的结果如下:

--------------------------
|xxxxxxxxxxx             |
|xxxxxxxxxxx             |
|xxxxxxxxxxx             |
|                        |
|                        |
--------------------------

虽然我希望他们这样:

--------------------------
|                        |
|                        |
|xxxxxxxxxxx             |
|xxxxxxxxxxx             |
|xxxxxxxxxxx             |
--------------------------

建议?

解决方法

我没有看到这样做的直接方式,但我设法使用以下方法强制它工作.我没有对此进行全面测试,所以我不能保证这在所有情况下都能正常工作.

使用此脚本:

#!/bin/bash
TERM_HEIGHT=`tput lines`  # determine terminal height
WATCH_BANNER_HEIGHT=2  # account for the lines taken up by the header of "watch"
let VIS_LINES="TERM_HEIGHT - WATCH_BANNER_HEIGHT"  # height of visible area
(yes " " | head -n $VIS_LINES; cat | head -n $VIS_LINES) | tail -n $VIS_LINES

后处理命令的输出,因为它由watch调用,例如(假设脚本保存为align_bottom,可执行,并存储在$PATH中的某个位置):

watch -n 120 "mysql_query | column -t | align_bottom"

脚本的作用:

>确定终端的高度(行数)
>计算手表输出的可见区域
>打印空行以填充输出(向下推输出)
>读入stdin的输出,并修剪它,这样我们只显示输出的顶部,如果它超出了屏幕.如果你想看到输出的底部,只需在cat之后删除head命令.
>拖尾步骤(3)和(4)的输出,以便去除多余的衬垫,最终输出紧贴在手表内

我不得不承认这似乎有些过时,但希望它能让你更接近你想要实现的目标.

更新:

它也应该可以实现它作为一个函数,只是因为它可以舒适地放在.bashrc中.

function align_bottom() {
  (( VIS = $(tput lines) - 2 ))  # height of visible area
  (yes " " | head -n $VIS; cat | head -n $VIS) | tail -n $VIS
}
typeset -fx align_bottom  # !! make it callable from subshell

用法是一样的:

watch -n 120 "mysql_query | column -t | align_bottom"

请注意,watch使用sh -c运行给定的命令,因此,正如Dennis在评论中指出的那样,在没有链接/ bin / sh到/ bin / bash的系统上,上面显示的函数方法将不起作用.

它可以使它工作:

watch -n 120 "mysql_query | column -t | bash -c align_bottom"

但是为了便携性和可用性,简单地使用shell脚本方法更简洁.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读