| 会员登录 立即注册

打印 上一主题 下一主题

如何从 Linux 终端发送桌面通知与提醒

[复制链接]
跳转到指定楼层
楼主
3AAA 发表于 2022-7-17 15:04:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主
3AAA
2022-7-17 15:04:31 3243 0 看楼主

这篇教程演示如何使用脚本命令来发送自己的桌面通知与提醒。



有时候,来自脚本的视觉回馈是很有用的。例如,当一个脚本或计划任务完成时,一个长期运行的构建任务失败时,或者当脚本执行中出现了紧急问题时。桌面应用程序可以通过弹出通知来做到这一点,但脚本也可以做到这一点!你可以使用脚本命令来给自己发送桌面通知与提醒。



下面的代码是在 Linux 上编写和测试的。它也可以在 macOS 上运行,只需花点功夫。请参见最后一节 提示与技巧。

从 Linux 终端发送通知


要从 Linux 终端发送通知,请使用 notify-send命令。运行which notify-send命令来查看它是否在于你的系统中。如果没有,请使用包管理器来安装它。

在 Fedora 上,输入:
$ sudo dnf install notify-send
在基于 Debian 的发行版上,输入:
$ sudo apt install notify-send
几个简单的通知示例:
$ notify-send "Dinner ready!"$ notify-send "Tip of the Day" "How about a nap?"
你可以用紧急程度、自定义图标等选项来自定义通知。过 man notify-send了解更多。你也可以在通知正文中使用一小组 HTML 标记,以使消息有一个棒的视觉感受。最重要的是,URL 被呈现为可点击的。例如:
$ notify-send -u critical \  "Build failed!" \  "There were 123errors. Click here to see the results: http://buildserver/latest"


发送的通知会被桌面环境接收,并像其他通知一样显示。它们将具有相同的外观、交互和行为。

将 notify-send 与 at 结合使用


计划任务通常被用来定期安排命令。at命令安排在一个指定的时间执行一条命令。如果你像这样运行它,它会以交互模式启动,你可以在其中输入要在指定时间执行的命令:
$ at 12:00
这对脚本来说并不有用。幸运的是 at接受来自标准输入的参数,所以我们可以这样使用它:
$ echo "npm run build" | at now + 1 minute$ echo "backup-db" | at 13:00
有许多指定时间的方法。 从绝对时间,如 10:00,到相对时间,如now + 2 hours,再特殊时间,如noon或midnight。我们可以把它和notify-send结合起来,在未来的某个时间向自己发送提醒。例如:
$ echo "notify-send 'Stop it and go home now?' 'Enough work for today.' -u critical" | at now


提醒的命令


现在,建立一个自定义的 Bash 命令来给自己发送提醒信息。像这样简单且人性化的命令:
$ 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
这比 Alexa 更好!该怎样做?

请看下面的代码。它定义了一个名为 remind的函数,它支持上述语法。实际工作是在最后两行完成的。其余的部分负责显示帮助信息、参数校验等,这与任何大型应用程序中有用的代码与必要的白噪声的比例大致相同。

把代码保存在某个地方,例如,在 ~/bin/remind文件中,并在你的.bashrc配置文件写入该函数,以便在你登录时加载它:
$ source ~/bin/remind
重新打开终端,然后输入 remind来查看语法。尽情享受吧!
#!/usr/bin/env bashfunction remind  {  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"}

简单的提醒


通过这几个简单的开源命令,你可以将你自己的脚本、应用程序和任务与你的桌面结合起来。试一试吧!

(文内图片来自 Tomasz Waraksa, CC BY-SA 4.0)

本文经作者许可改编自 原文。

via: https://opensource.com/article/22/1/linux-desktop-notifications

作者:Tomasz Waraksa选题:lujun9972译者:mcfd校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

3AAA 当前离线
白银会员

查看:3243 | 回复:0

关于我们  |   侵权投诉受理  |   联系我们  |   Archiver  |  
免责声明:邳州信息网所有言论只代表发表者个人观点,与本站无关
Copyright © 2009-2025 pzxxw.com 版权所有:邳州金银杏文化传媒有限公司  

苏公网安备 32038202000401号

快速回复 返回顶部 返回列表