watch -e 在命令失败时仅高亮标题栏为红色,不报错、不暂停、不隐藏输出;错误内容是否可见取决于命令是否输出stderr,需避免重定向屏蔽且终端宽度足够。

用 watch -e 可以在命令执行失败(退出码非零)时高亮顶部标题栏,但注意:它不会“报错”或打印错误信息,也不会自动保持窗口显示——watch 本身始终维持全屏界面,除非你手动退出(Ctrl+C)。所谓“高亮报错”,其实是通过视觉提示告诉你:刚刚那一轮执行出问题了。
关键机制:-e 选项只改变标题颜色
-e(或 --errexit)的作用是:当被监控的命令返回非零退出状态时,watch 会把顶部的标题栏(含时间、命令、间隔)变成红色(部分终端下为反色或闪烁),其余输出区域照常显示——包括命令本身的 stderr 输出(如 command not found、No such file 等)。它不拦截错误、不暂停、不退出、也不隐藏输出。
- 正常成功时:标题栏为默认颜色(通常是白/灰)
- 某次执行失败时:标题栏立即变红,持续到下一次执行完成(无论成败)
- 错误内容是否可见?取决于命令本身是否输出 stderr —— watch 不屏蔽它
确保你能看到错误输出的实操要点
很多用户以为加了 -e 就该弹窗报错,结果发现什么都没看到,其实是命令静默失败或输出被覆盖。请检查以下几点:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
命令本身要输出错误:比如
watch -e 'ls /nonexistent'会显示ls: cannot access '/nonexistent': No such file or directory;但watch -e 'false'没输出,只靠标题变红提示 -
避免重定向吞掉 stderr:不要写成
watch -e 'cmd 2>/dev/null',否则错误被丢弃,只剩标题变红却不知为何 - 终端别太小:watch 在窄窗口中可能截断输出,导致错误行被挤出可视区。建议宽度 ≥100 列
-
配合 -t 要谨慎:如果加了
-t(隐藏标题),就彻底失去 -e 的视觉提示了——两者互斥
增强可读性的常用组合
单靠 -e 提示较弱,建议搭配其他选项让失败更醒目:
-
watch -e -d 'your_command':失败时标题变红 + 输出差异高亮(适合观察日志、计数类变化) -
watch -e -b 'your_command':失败时标题变红 + 终端蜂鸣(需系统支持 beep) -
watch -e 'your_command 2>&1 | cat -n':强制把 stderr 转为 stdout 并加行号,确保不丢失
替代思路:需要真“报错提醒”时考虑循环脚本
如果场景是“一旦磁盘满、服务宕、端口不通,就要立刻知道并通知”,watch -e 的视觉提示不够可靠(容易忽略、无法外发)。此时更适合用 shell 循环:
- 每5秒检查一次端口:
while ! nc -z localhost 8080; do echo "$(date) - Port 8080 down!"; sleep 5; done - 失败时发桌面通知:
if ! systemctl is-active --quiet nginx; then notify-send "NGINX DOWN" "$(date)"; fi
这类方式可集成日志、邮件、声音、图形通知,比单纯依赖 watch 标题颜色更稳妥。










