操作概述有时需要连续执行命令并跟踪其输出的变化。一种常见的方法是编写一个无限循环的shell脚本,但是Linux本身已经提供了一个工具来帮助你周期性地执行指定的程序并全屏输出结果,本节将介绍该工具。概念和术语在shell上执行命令行时,通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应于终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件对应终端的屏幕。该进程将从标准输入文件中获取输入数据,将正常输出数据输出到标准输出文件,并将错误信息发送到标准错误文件。操作实战场景一:使用watch定时执行命令并监控输出难点Demo发行版Ubuntu涉及命令watchwatch的基本使用watch的使用非常简单,只需要:watch命令,这样watch命令就会每两秒运行一次命令并全屏输出执行结果。下图是执行watchdate的界面:Every2.0s:dateorangepipc2:SatOct309:55:142020Sat03Oct202009:55:14AMCST在图中第一行,Every2.0s:表示手表每2秒执行一次命令。下面的日期是要执行的命令。下面的orangepipc2:是执行命令的主机名,SatOct309:55:142020是执行命令的时间。从第三行开始就是命令执行的输出结果。通过-ninterval指定重复执行命令的时间间隔你也可以设置重复执行命令的时间间隔,比如我可以调整为每5秒执行一次date命令watch-n5date来查找输出的变化if它只是一个简单的重复如果你执行一个命令,它可以很容易地通过一个shell循环来实现,但手表的能力并不局限于此。通过-d选项,watch还可以高亮显示两个输出的不同部分。这个函数非常有用:watch-d-n10date除了高亮显示输出中变化的部分,你还可以设置watch来发现结果有变化时退出循环,使用-g/--chgexit选项。例如,我们可以使用以下命令来查找USB变化。watch-g'dmesg|grep-iusb|tail'检测命令执行的返回值watch默认不关心命令执行结果是否成功,但是可以设置watch检测命令的返回值命令,当命令运行蜂鸣声(-b/--beep)或退出(-e/--errexit)返回非零时。watch-ewrong_commands小练习尝试使用watch监控工程目录,结合其他工具实现自动编译。
