在UNIX shell下,如何获得与watch
命令类似的效果,但如果分页占用多个屏幕,则可以在输出中滚动。
换句话说,我想要一个能够watch
less
什么的程序。
作为一个例子,可以说我想看看qstat
的输出,我可以使用
watch qstat
观看qstat的输出,但是这只能显示第一个screenful。
随着watch
的分页版本,我将能够在输出中移动,因为它仍然通过watch
不断更新。 现在有什么办法可以用现有的工具来做到这一点?
而不是修改'看'命令,使用屏幕!
例如,假设您需要能够看到300行高度和100个宽度字符并移动。 启动屏幕后,强制如下大小:
<CA>:height -w 300 <CA>:width -w 100
现在开始你的手表命令。 然后,您可以使用<CA>ESC
在显示屏上翻页。
不幸的是,在复印模式下显示不刷新。 但是,如果要调整正在查看的窗口的哪一部分,最简单的方法可能是重新运行高度/宽度命令,默认情况下terminal将显示虚拟窗口的右下angular。
你可以试试这个:
而vmstat; 做睡1; 完成| 减
用qstatreplacevmstat并根据需要调整睡眠
Multitail: http ://www.vanheusden.com/multitail/
例:
vmstat 1 |multitail -j
按“b”和页面/箭头向上/向下滚动。
好的,我已经有一个小小的function了。 这有点粗糙,它似乎还没有完全工作,但是这里有:
#!/bin/bash -u out=$(mktemp) (while [ 1 ]; do "$@" > $out; sleep 2; done) & less $out kill $!
您必须手动使用较less的R
键才能更新显示。
它似乎适用于watchless date
但不适用于不watchless qstat
或不watchless pstree
,它们都显示为空白。 有任何想法吗?
我不明白这是如何实现的,因为行内容发生了变化,即使您可以向下滚动, watch
也会每2秒重置一行。
一些解决方法是:
watch 'qstat | tail -n40'
watch 'qstat | tail -n40'
从底部的第40行开始显示qstat的输出
watch 'qstat | grep jsmith'
watch 'qstat | grep jsmith'
来grep输出,所以你感兴趣的行总是在第一个屏幕上。
请注意,您需要将命令放在pipe道的单引号中,否则您将输出watch
的输出,而不是qstat
的输出。
继续恩克斯的回答,
看'qstat | 头-300 | 尾巴-15'
会让你任意页面到qstat的输出。
这是一个相当粗糙的脚本,似乎适用于我投掷了几个命令
#!/bin/bash # ---- mywatch.sh ---- if [ $# -lt 1 && $# -gt 2 ]; then echo "Usage: $0 <command> <delay>" exit 1 fi CMD=$1 if [ $# -eq 2 ]; then DELAY=$2 else DELAY=2 # default fi while : ; do ( (echo -e "Every ${DELAY}s: $CMD\n"; $CMD) | less )& PID=$! sleep $DELAY kill -9 $PID &> /dev/null clear done
如此使用:
alias mywatch="~/bin/mywatch.sh" mywatch vmstat mywatch "ps aux" # commands in options need to be quoted mywaych pstree 10 # change delays
相当迂腐,刷新之间的过渡并不像我希望的那样顺利。 当然,作为一个简单的脚本,它不支持diff的高亮显示(watch -d)。 而且,input参数的parsing可以做得更好。
那怎么样:tail -f
我实现了一个简单的python脚本来满足这个请求,名为“watchall”
得到它: pip安装watchall
用watchallreplace手表,并享受可滚动屏幕。 现在它只支持-n和-d标志。
你可以试试:
watch command > file
然后在你的文件中,你应该看到appendend输出(我现在没有一个linux的盒子来testing这个)