| WATCH(1) | General Commands Manual | WATCH(1) |
名称
watch - 周期性地执行程序并全屏显示输出
概述
watch [选项 ...] 命令
描述
watch 重复运行 命令,显示其输出和错误(前者全屏显示)。这使您可以观察程序输出随时间的变化。默认情况下,命令 每 2 秒运行一次,watch 将持续运行,直到被中断 (Ctrl-C)。输出的头部包括 命令 的开始时间和运行时间,以及它的退出状态码。
选项
- -b, --beep
- 如果 命令 以非零返回值退出,则发出哔声。
- -c, --color
- 解释 ANSI 颜色和风格序列。
- -C, --no-color
- 不要解释 ANSI 颜色和风格序列。
- -d, --differences[=永久]
- 高亮显示两次更新之间的变化。如果指定了可选的 永久 参数,则 watch 将显示自第一次迭代以来的所有变化。永久 参数需要和选项相连,例如 -d1 or --differences=1。
- -e, --errexit
- 在 命令 出错时停止更新,并在按任意键后退出。watch 的退出状态码是 命令 的退出状态码。如果信号 n 是 命令 终止的原因,则退出状态码是 128 + n。
- -f, --follow
- watch 不会在每次更新时清除屏幕,而是会像 tail -f 那样滚动显示输出内容。此选项与任何追踪屏幕输出的选项(如 --differences、--chgexit 和 --eqexit)均不兼容。
- -g, --chgexit
- 在 命令 的可见的输出发生变化时退出。因为屏幕大小或者输出太大,无法在屏幕上显示的变化,不会导致 watch 退出。
- -n, --interval 秒
- 指定更新间隔。小于 0.1 和大于 2678400(31 天)的时间间隔将被转换成相应的下限和上限。任何区域设置下都可以用 '.' 或 ',' 作为小数点。可使用 WATCH_INTERVAL 环境变量持久性地设置一个非默认的时间间隔(遵循相同的规则和格式)。
- -p, --precise
- 在 命令 上一次执行开始之后 --interval 秒执行命令,而不是上一次执行结束之后 --interval 秒。如果完成 命令 需要的时间超过了 --interval 秒,那么不论哪种情况,都会等待命令完成。
- -q, --equexit <周期数>
- 如果 命令 的输出在给定的周期数内没有变化,则退出。
- -r, --no-rerun
- 不要在终端大小变化时重新运行程序,程序的输出将在下一次正常运行时重新出现。
- -s, --shotsdir
- 保存屏幕截图的目录。
- -t, --no-title
- 关闭通常在屏幕顶部显示的标题行。
- -w, --no-wrap
- 关闭自动换行。长行将被截断而不是换行到下一行。
- -x, --exec
- 将 命令 传给 exec(3) 而不是 sh -c。程序的启动会稍微加快一点。Shell 功能(环境变量设置、变量和路径展开等)将不可用。
- -h, --help
- 显示帮助文本并退出。
- -v, --version
- 显示版本信息并退出。
按键控制
退出状态
- 0
- 成功。不代表 命令 的退出码。
- 1
- 和 命令 的操作无关的错误。
- 2
- 和 命令 的执行和管理有关的错误(不是它的退出码)。
- 任何非零值 (--errexit)
- 使用 --errexit 时,将返回 命令 的最后一个退出码。
环境
watch 的行为受以下环境变量的影响。
- WATCH_INTERVAL
- 更新间隔,遵循与 --interval 命令行选项相同的规则。
- COLUMNS
- 终端屏幕宽度(字符数)。设置此变量来覆盖自动检测的结果。
- LINES
- 终端屏幕高度(字符数)。设置此变量来覆盖自动检测的结果。
备注
本命令使用 POSIX 选项处理方式(即选项处理会在第一个非选项的参数处停止)。这意味着 命令 之后的标志不会由 watch 本身进行解释。
不可打印字符将从程序输出中去除。如果您想查看它们,请使用 cat -v 作为命令管道的一部分。
示例
要监控目录内容的更改,您可以使用
- watch -d ls -l
如果您有支持动态调频的 CPU,并且想观察频率的变化,请试试以下命令。该命令会被传给 shell,所以您可以使用管道。双引号也是 shell 的功能之一。
- watch -n1 'grep "^cpu MHz" /proc/cpuinfo | sort -nrk4'
要监控服务器的运行状态,您可以使用此方法将每次运行的输出的副本保存到文件中。-p 使命令每 10 秒执行一次,而不管上次运行花了多长时间。
- watch -n10 -p -d '{ date; for i in 10.0.0.31 10.0.0.32 10.0.0.33; do R=OK; ping -c2 -W2 "$i" &>/dev/null || R=FAIL; echo "$i: $R"; done } | tee -a ~/log'
要观察管理员有没有安装最新内核,您可以使用
- watch uname -r
错误
当终端大小发生变化时,在下一次 命令 运行时,终端的内容变化将不作数。即使 命令 的输出同时发生变化,本次执行也不会触发 --chgexit,并且 --equexit 的计数器也不会重置。--differences 的高亮显示将被重置。
报告错误
请将错误报告发送到 procps@freelists.org。
| 2025-04-16 | procps-ng |