加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash one-liner,显示正在运行的倒计时,直到DNS更新(TTL

发布时间:2020-12-14 02:31:15 所属栏目:Linux 来源:网络整理
导读:我发现自己经常负责更新DNS记录,并且需要知道刷新何时开始(a.k.a TTL到期).我想出了这个bash one-liner,它给了我想要的输出: $dig +noall +answer www.google.com | awk '{ print $2 }' | { read secs; echo "`expr $secs / 60`m `expr $secs % 60`s re
我发现自己经常负责更新DNS记录,并且需要知道刷新何时开始(a.k.a TTL到期).我想出了这个bash one-liner,它给了我想要的输出:
$dig +noall +answer www.google.com | 
> awk '{ print $2 }' | 
> { read secs; echo "`expr $secs / 60`m `expr $secs % 60`s remaining ($secs)"; }

输出:

3m 36s remaining (216)

我希望能够将watch命令包围起来,以便我可以让它在终端中运行并获得实时倒计时.就像是:

$watch -n 10 "dig +noall +answer www.google.com | 
> awk '{ print $2 }' | 
> { read secs; echo '`expr $secs / 60`m `expr $secs % 60`s remaining ($secs)'; }"

但这只会导致一个非功能性的监视实例,其后是:

expr: syntax error

我很确定这是一种管道/引用问题,我不是那么精通错综复杂的东西.为了便于携带,我宁愿将其保留为单行而不是诉诸需要保存到磁盘的脚本.有谁知道正确的方法来实现这一目标?

解决方法

首先,您需要避免使用expr.它很少使用.相反,我在这里的版本完全相同.与上述差别不大:
watch -n1 'dig +noall +answer google.com |  
 awk "{print $2}" | 
 { read secs; echo "$((secs / 60 ))m $((secs % 60))s remaining $((secs))";}'

另一种可以使用tmux或screen使用的方法

while sleep 1; do dig +noall +answer google.com |  
   { while read -r secs; do echo "$((secs / 60 ))m $((secs % 60))s remaining $((secs)) seconds"; done < <(awk '{print $2}' | 
   head -n1 ); };  done

祝好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读