是否有`watch`的分页版本?


24

在UNIX shell下,如何获得与watch命令相似的效果,但如何使用分页,以便在占用多个屏幕的情况下在输出中滚动?

换句话说,我希望有一个程序,它是watch什么lesscat

例如,假设我想观看的输出qstat,我可以使用

watch qstat

观看qstat的输出,但这只能显示第一个屏幕。

使用的分页版本时watch,我可以在输出中继续移动,因为它仍由不断更新watch。现有的实用程序目前有什么方法可以做到这一点?


这可能属于SuperUser或ServerFault。

您可能是对的,我该如何移动?
戴恩·迪恩

到目前为止,已有三人投票通过;如果再有两个人(或主持人)投票将其移动,它将自动发生。
2009年

为什么不打开一个更大的窗口而完全放弃寻呼呢?
Marcin

1
因为我的屏幕已经满了?为什么只在使用less时才使用cat更大的窗口?
David Dean

Answers:


18

不用修改'watch'命令,而是使用screen!

例如,假设您需要能够看到300行高度和100个字符宽度并在其周围移动。启动屏幕后,按以下方式强制大小:

C-a :height -w 300
C-a :width -w 100

现在启动监视命令。然后,您可以C-a <ESC>在显示屏上翻页。

不幸的是,在复印模式下显示不会刷新。但是,如果要调整正在查看的窗口的哪个部分,最简单的方法可能是重新运行height / width命令,因为默认情况下,终端将显示虚拟窗口的右下角。


那么唯一的问题是如何不断地重复执行该命令,而消隐各走各的屏幕
大卫·迪恩

糟糕,我的意思是在屏幕上运行watch命令。固定。
MikeyB

yartls-爱屏幕的另一个原因:)
沃伦

请注意,C-又名ctrl-
亨利

5

您可以尝试以下方法:

而vmstat; 睡1 完成| 减

用qstat替换vmstat并根据需要调整睡眠


所有要做的就是继续将命令重复到中less,这意味着您需要继续滚动以查看最新的输出。
大卫·迪恩

是的,但是您可以向后滚动。您不能一次拥有两个。按下Shift键,即大写字母“ F”将像尾巴一样工作。
Spacen Jasset

4

多尾: http

例:

 vmstat 1 |multitail -j

按下“ b”并向上/向下翻页/向下滚动。


2

好的,我在功能上做了一点努力watchless。这有点粗糙,而且似乎还不能完全正常工作,但是可以这样:

#!/bin/bash -u
out=$(mktemp)
(while [ 1 ]; do
    "$@" > $out;
    sleep 2;
done) &
less $out
kill $!

您必须手动使用 R少键来更新显示。

它似乎适用于,watchless date但不适用于watchless qstatwatchless pstree,两者均显示为空白。有任何想法吗?


您应该使用第二个文件中写入命令的下一次运行的输出,然后mv通过第二个文件到文件读取lessmv是原子。否则less,如果在用写入文件的同时请求刷新,则可能认为文件已消失"$@" > $out。在开始循环之前,还应该一次写入输出文件。
的Aurelien奥姆斯

0

我不知道如何在行内容更改时实现此功能,watch即使您向下滚动,它也会每2秒重置到第一行。

一些解决方法是:

watch 'qstat | tail -n40' 从底部的第40行开始显示qstat的输出

watch 'qstat | grep jsmith' grep输出,以便您感兴趣的行始终在第一个屏幕中。

请注意,您需要将命令用单引号引起来,否则将用于管道输出watch,而不是管道输出qstat


0

要继续回答enkrs,

看'qstat | 头-300 | 尾部-15'

将使您进入qstat输出的任意页面。


0

这是一个相当粗糙的脚本,似乎可以用于我抛出的几个命令

#!/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)。同样,输入参数的解析可以做得更好。



0

我实现了一个简单的python脚本来满足此要求,名为“ watchall”

得到它: pip install watchall

用watchall代替watch并享受可滚动的屏幕。现在它仅支持-n和-d标志。


-1

你可以试试:

watch command > file

然后在您的文件中,您应该看到appendend输出(我现在没有linux box rigth来进行测试)


1
那样做并不能满足您的意图,实际上,它只会file一遍又一遍地填充相同的输出。它当然不能解决原始问题。
2009年

然后我不知道:)

1
将“>”更改为“ >>”以使其将数据附加到文件?
罗里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.