我没有看到直接的方法来做到这一点,但我设法使用以下方法强制它工作。我还没有完全测试过这个,所以我不能保证这在所有情况下都有效。
使用此脚本:
#!/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
eg 调用(假设脚本保存为align_bottom
,可执行,并存储在您的某处$PATH
):
watch -n 120 "mysql_query | column -t | align_bottom"
脚本的作用:
- 确定终端的高度(行数)
- 计算
watch
输出的可见区域
- 打印空白行以填充输出(向下推输出)
- 从标准输入读入输出,并修剪它,这样我们只在输出超出屏幕时显示输出的顶部。如果您想查看输出的底部,只需删除
head
之后的命令即可cat
。
tail
步骤(3)和(4)的输出,因此多余的填充被删除,最终输出正好适合watch
我不得不承认这似乎有点骇人听闻,但希望它能让你更接近你想要实现的目标。
更新:
也应该可以将其作为一个函数来实现,以便它可以舒适地放在.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
,因此,正如丹尼斯在评论中指出的那样,在没有链接/bin/sh
到/bin/bash
上面显示的函数方法的系统上将不起作用。
有可能使它工作ussign:
watch -n 120 "mysql_query | column -t | bash -c align_bottom"
但是为了可移植性和可用性,简单地使用 shell 脚本方法会更干净。