GNU watch 不会删除之前的输出

GNU watch 不会删除之前的输出

牛羚watch是一个用于检查程序输出的非常有用的工具:它每 2 秒执行程序并全屏显示输出。

有时,我不希望删除以前的输出,而是希望逐行打印并带有时间戳。为此,我使用如下 bash 脚本:

while true; 
    do echo -n "`date`   "; 
    ssh ubuntu@server -o ConnectTimeout=1 "uptime" ; 
    sleep 1; 
done

有没有watch类似工具可以运行一个命令并在一行中显示其输出和时间戳,而不会擦除先前的输出?

答案1

我想说您已经在简单的循环中找到了它,但是您可以从这里做很多事情:

编写一个函数来帮你处理这个问题

function uberwatch {
    # call: uberwatch <interval> <command>
    while true; do
        "${@:2}";
        sleep $1;
    done
}

你可以把它寄存在你家附近的某个地方~/.bashrc

将输出记录到文件但继续查看watch

watch "command | tee -a watchlog.log"

您仍然只能看到最新的一次运行,但如果需要,您可以查阅历史记录。

答案2

当为真时;执行日期 >> /vat/tmp/watch.log;睡眠 600;ls -l 文件名 >> /var/tmp/watch.log;完成

我喜欢上面 Artem 提到的 while 循环,但希望将数据存储在文件中,以便我回来时可以对其进行分析,因此添加了文件重定向。在我的例子中,每 10 分钟查看一次文件,并使用 ls -l 查看文件大小

-杰伊

答案3

我喜欢 Oli 的修改的watch解决方案,但我喜欢实时查看日志而不是稍后再挖掘它的想法。

这是一个想法:

watch 'echo $(date && command 2>&1 | tail -n 1) >> watchlog.log && cat watchlog.log | tail'

解释:

  • echodate避免在和之间出现换行符command
  • >>附加到文件,相同| tee -a但不会在watch输出中重复。
  • 2>&1将 stderr 与 stdout 结合起来以确保您看到所有内容,包括错误。
  • | tail -n 1将输出限制在最后一行(包含输出的行date),以便实时查看。这可能是也可能不是您对日志文件内容的期望。

相关内容