服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Linux使用终端工具给你的电脑发送弹窗提醒!

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

2022-01-07 22:43良许Linux良许 Linux

现在人手一部智能手机,这些智能手机都有个非常实用的功能,那就是弹窗提醒。当我们收到短信,或者微信信息时,手机就会弹窗显示信息的大致内容。有了这个功能你就不会错过重要信息了。

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

大家好,我是良许。

现在人手一部智能手机,这些智能手机都有个非常实用的功能,那就是弹窗提醒。当我们收到短信,或者微信信息时,手机就会弹窗显示信息的大致内容。有了这个功能你就不会错过重要信息了。

电脑上也有类似的功能,也很实用。但这个功能都是系统级别,我们能不能通过脚本方式去调用这个弹窗功能呢?

答案是肯定的!

例如,当脚本或 cron 任务完成时,长时间运行的编译任务失败,或者脚本执行过程中出现紧急问题,这些情况下如果能在电脑上弹出一条提醒,肯定会让隔壁的美女同事刮目相看!

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

以下代码已在 Linux 系统上编写并测试通过,也可以移植到 Mac 电脑上。

从 Linux 终端发送弹窗通知

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

在 Fedora 上,输入:

  1. $ sudo dnf install notify-send 

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

  1. $ sudo apt install notify-send 

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

  1. $ notify-send "liangxu is great!!" 
  2. $ notify-send "welcome to liangxu's website" "www.lxlinux.net" 

这个命令不仅支持弹窗,还可以修改紧急程度、自定义图标等。更多信息可以通过 man notify-send 来查询。

你还可以在通知正文中使用一小段 HTML 标记来为你的信息增加一些格式,比如:加粗、斜体,等等。最重要的是,URL 还支持点击,非常方便。例如:

  1. $ notify-send -u critical \ 
  2.   "Build failed!" \ 
  3.   "There were <b>123</b> errors. Click here to see the results: http://buildserver/latest" 

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

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

结合 at 命令使用 notify-send

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

  1. at 12:00 

但我们一般不这么使用它。

at 命令可以接受来自标准输入的参数,例如:

  1. $ echo "npm run build" | at now + 1 minute 
  2. $ echo "backup-db" | at 13:00 

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

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

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

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

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

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

现在我们知道 nofity-send 怎么玩了,但每次都要敲这么长的一串命令还是很不方便。

作为程序员,我们能偷懒就偷懒,自己动手写脚本把这个功能封装起来!

比如我们把它封装成一个 Bash 命令 remind ,然后通过下面方式来调用它:

  1. $ remind "I'm still here" now 
  2. $ remind "Time to wake up!" in 5 minutes 
  3. $ remind "Dinner" in 1 hour 
  4. $ remind "Take a break" at noon 
  5. $ remind "It's Friday pints time!" at 17:00 

简直太特么方便了!

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

  1. $ source ~/bin/remind 

脚本内容如下:

  1. #!/usr/bin/env bash 
  2. function remind () { 
  3.   local COUNT="$#" 
  4.   local COMMAND="$1" 
  5.   local MESSAGE="$1" 
  6.   local OP="$2" 
  7.   shift 2 
  8.   local WHEN="$@" 
  9.   # Display help if no parameters or help command 
  10.   if [[ $COUNT -eq 0 || "$COMMAND" == "help" || "$COMMAND" == "--help" || "$COMMAND" == "-h" ]]; then 
  11.     echo "COMMAND" 
  12.     echo "    remind <message> <time>" 
  13.     echo "    remind <command>" 
  14.     echo 
  15.     echo "DESCRIPTION" 
  16.     echo "    Displays notification at specified time" 
  17.     echo 
  18.     echo "EXAMPLES" 
  19.     echo '    remind "Hi there" now' 
  20.     echo '    remind "Time to wake up" in 5 minutes' 
  21.     echo '    remind "Dinner" in 1 hour' 
  22.     echo '    remind "Take a break" at noon' 
  23.     echo '    remind "Are you ready?" at 13:00' 
  24.     echo '    remind list' 
  25.     echo '    remind clear' 
  26.     echo '    remind help' 
  27.     echo 
  28.     return 
  29.   fi 
  30.   # Check presence of AT command 
  31.   if ! which at >/dev/nullthen 
  32.     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'." 
  33.     return 
  34.   fi 
  35.   # Run commands: list, clear 
  36.   if [[ $COUNT -eq 1 ]]; then 
  37.     if [[ "$COMMAND" == "list" ]]; then 
  38.       at -l 
  39.     elif [[ "$COMMAND" == "clear" ]]; then 
  40.       at -r $(atq | cut -f1) 
  41.     else 
  42.       echo "remind: unknown command $COMMAND. Type 'remind' without any parameters to see syntax." 
  43.     fi 
  44.     return 
  45.   fi 
  46.   # Determine time of notification 
  47.   if [[ "$OP" == "in" ]]; then 
  48.     local TIME="now + $WHEN" 
  49.   elif [[ "$OP" == "at" ]]; then 
  50.     local TIME="$WHEN" 
  51.   elif [[ "$OP" == "now" ]]; then 
  52.     local TIME="now" 
  53.   else 
  54.     echo "remind: invalid time operator $OP" 
  55.     return 
  56.   fi 
  57.   # Schedule the notification 
  58.   echo "notify-send '$MESSAGE' 'Reminder' -u critical" | at $TIME 2>/dev/null 
  59.   echo "Notification scheduled at $TIME" 

好好玩玩吧!

原文链接:https://mp.weixin.qq.com/s/ln-YHil-eDkuXh-Sf4VtKQ

延伸 · 阅读

精彩推荐
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10