使用终端工具给你的电脑发送弹窗提醒!

简介: 使用终端工具给你的电脑发送弹窗提醒!

大家好,我是良许。现在人手一部智能手机,这些智能手机都有个非常实用的功能,那就是弹窗提醒。当我们收到短信,或者微信信息时,手机就会弹窗显示信息的大致内容。有了这个功能你就不会错过重要信息了。电脑上也有类似的功能,也很实用。但这个功能都是系统级别,我们能不能通过脚本方式去调用这个弹窗功能呢?答案是肯定的!例如,当脚本或 cron 任务完成时,长时间运行的编译任务失败,或者脚本执行过程中出现紧急问题,这些情况下如果能在电脑上弹出一条提醒,肯定会让隔壁的美女同事刮目相看!微信图片_20220419172416.jpg以下代码已在 Linux 系统上编写并测试通过,也可以移植到 Mac 电脑上。

从 Linux 终端发送弹窗通知

要从 Linux 终端发送通知,需要使用 notify-send 命令。这个命令大部分发行版都没有默认安装,需要我们自行动手。在 Fedora 上,输入:

$ sudo dnf install notify-send

在基于 Debian 的发行版上,键入:

$ sudo apt install notify-send

几个简单弹窗通知的例子:

$ notify-send "liangxu is great!!"

$ notify-send "welcome to liangxu's website""www.lxlinux.net"

这个命令不仅支持弹窗,还可以修改紧急程度、自定义图标等。更多信息可以通过 man notify-send 来查询。你还可以在通知正文中使用一小段 HTML 标记来为你的信息增加一些格式,比如:加粗、斜体,等等。最重要的是,URL 还支持点击,非常方便。例如:

$ notify-send -u critical \

 "Build failed!" \

 "There were <b>123</b> errors. Click here to see the results: http://buildserver/latest"

微信图片_20220419172419.jpg

发送的通知跟系统的其它通知样式一样,外观、行为并无二致。

结合 at 命令使用 notify-send

cron 命令通常用于定期调度任务,at 命令则是在指定时间单次执行指定命令。如果你像下面这样运行 at 命令,它会以交互模式启动,然后你可以在其中输入你要执行的命令:

$ at 12:00

但我们一般不这么使用它。at 命令可以接受来自标准输入的参数,例如:

$ echo"npm run build" | at now + 1 minute

$ echo"backup-db" | at 13:00

熟练使用 Linux 的小伙伴都知道,我们有多种指定时间的方法。

  • 绝对时间,例如 10:00
  • 相对时间,例如 now + 2 hours
  • 特殊时间,例如 noonmidnight

利用 at 命令的这些特性,我们可以将它与 notify-send 命令结合使用,达到在未来的某个时间弹窗提醒的效果。例如:

$ echo"notify-send 'Stop it and go home now?' 'Enough work for today.' -u critical" | at now

微信图片_20220419172422.jpg

编写脚本实现弹窗通知功能

现在我们知道 nofity-send 怎么玩了,但每次都要敲这么长的一串命令还是很不方便。作为程序员,我们能偷懒就偷懒,自己动手写脚本把这个功能封装起来!比如我们把它封装成一个 Bash 命令 remind ,然后通过下面方式来调用它:

$ remind "I'm still here" now

$ remind "Time to wake up!"in 5 minutes

$ remind "Dinner"in 1 hour

$ remind "Take a break" at noon

$ remind "It's Friday pints time!" at 17:00

简直太特么方便了!实现起来也很简单,我们可以将脚本保存在某个位置,例如,在 ~/bin/ 目录中,并在 .bashrc 配置文件中让它生效,以便在登录时加载它:

$ source ~/bin/remind

脚本内容如下:

#!/usr/bin/env bash

functionremind () {

 local COUNT="$#"

 local COMMAND="$1"

 local MESSAGE="$1"

 local OP="$2"

 shift 2

 local WHEN="$@"

 # Display help if no parameters or help command

 if [[ $COUNT -eq 0 || "$COMMAND" == "help" || "$COMMAND" == "--help" || "$COMMAND" == "-h" ]]; then

   echo"COMMAND"

   echo"    remind <message> <time>"

   echo"    remind <command>"

   echo

   echo"DESCRIPTION"

   echo"    Displays notification at specified time"

   echo

   echo"EXAMPLES"

   echo'    remind "Hi there" now'

   echo'    remind "Time to wake up" in 5 minutes'

   echo'    remind "Dinner" in 1 hour'

   echo'    remind "Take a break" at noon'

   echo'    remind "Are you ready?" at 13:00'

   echo'    remind list'

   echo'    remind clear'

   echo'    remind help'

   echo

   return

 fi

 # Check presence of AT command

 if ! which at >/dev/null; then

   echo"remind: AT utility is required but not installed on your system. Install it with your package manager of choice, for example 'sudo apt install at'."

   return

 fi

 # Run commands: list, clear

 if [[ $COUNT -eq 1 ]]; then

   if [[ "$COMMAND" == "list" ]]; then

     at -l

   elif [[ "$COMMAND" == "clear" ]]; then

     at -r $(atq | cut -f1)

   else

     echo"remind: unknown command $COMMAND. Type 'remind' without any parameters to see syntax."

   fi

   return

 fi

 # Determine time of notification

 if [[ "$OP" == "in" ]]; then

   local TIME="now + $WHEN"

 elif [[ "$OP" == "at" ]]; then

   local TIME="$WHEN"

 elif [[ "$OP" == "now" ]]; then

   local TIME="now"

 else

   echo"remind: invalid time operator $OP"

   return

 fi

 # Schedule the notification

 echo"notify-send '$MESSAGE' 'Reminder' -u critical" | at $TIME 2>/dev/null

 echo"Notification scheduled at $TIME"

}

好好玩玩吧!

目录
相关文章
|
2月前
|
Ubuntu Linux
Ubuntu启动提示"recovering journal"并进入紧急模式。
若您对Linux系统不太熟悉,建议寻求有经验的技术人员帮助。在大多数情况下,这些步骤将足以帮助您诊断问题,并可能恢复系统到正常工作状态,但是在极端情况下,系统可能无法修复,那时就需要考虑恢复数据和重新安装Ubuntu。所以,在日常使用中定时备份数据是非常重要的。这样可以在遇到系统崩溃时降低数据丢失的风险。
243 0
|
10月前
|
消息中间件 人工智能 自然语言处理
基于事件驱动构建 AI 原生应用
AI 应用在商业化服务的阶段会面临诸多挑战,比如更快的服务交付速度,更实时、精准的结果以及更人性化的体验等,传统架构限制于同步交互,无法满足上述需求,本篇文章给大家分享一下如何基于事件驱动架构应对上述挑战。
641 241
|
11月前
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解
309 4
|
11月前
|
人工智能 监控 安全
掌握Windows管理利器:WMI命令实战
本文介绍了Windows Management Instrumentation (WMI) 的基本概念和用途,通过多个实用的`wmic`命令示例,如获取CPU信息、查看操作系统详情、管理服务、检查磁盘空间等,展示了WMI在系统维护中的强大功能。适合IT专业人士学习和参考。
610 4
|
机器学习/深度学习 存储 自然语言处理
自然语言处理 Paddle NLP - 信息抽取技术及应用
自然语言处理 Paddle NLP - 信息抽取技术及应用
360 0
|
存储 弹性计算 安全
阿里云服务器2核4G、4核8G、8核16G实例选型指南:经济型、通用算力型和计算型选择参考
2核4G/4核8G/8核16G配置的云服务器在阿里云目前的活动中有经济型e、通用算力型u1和计算型c7、计算型c8y、计算型c7a等计算型实例可选,虽然配置相同,但是这些实例规格之间的性能和价格差别是很大的,因此,我们有必要弄清楚他们之间的差别,这样才能根据自己的需求选择最适合自己的实例。
阿里云服务器2核4G、4核8G、8核16G实例选型指南:经济型、通用算力型和计算型选择参考
|
人工智能 算法 双11
公开下载 |《2023技术人的百宝黑皮书》来了!
公开下载 |《2023技术人的百宝黑皮书》来了!
651 3
|
IDE Linux 数据处理
探索Linux中的`pydoc`命令:Python文档生成器的力量
`pydoc`是Linux上Python的文档生成和查看工具,尤其对数据科学家有价值。它从docstring生成模块、函数和类的文档,提供快速API参考。主要特点包括易用性、支持标准库和第三方库、跨平台。命令行示例:`pydoc pandas` 查看库文档,`pydoc numpy.array` 查看类详情,`pydoc -k 关键字` 进行搜索。使用时注意正确安装Python,编写清晰的docstring,并结合IDE以提升效率。
|
数据采集 存储 分布式计算
数据爆炸时代的挑战与机遇:大规模数据处理的技术突破
在当今数字化时代,数据量呈现爆炸式增长,给传统数据处理带来了巨大挑战。本文将探讨大规模数据处理所面临的问题,并介绍一些技术突破,如分布式计算、云计算和人工智能,以应对这一挑战。通过有效处理和分析海量数据,我们将迎来更多的机遇和创新。