有时从脚本中获得视觉反馈很有用。例如,当脚本或 cron 作业完成时,长时间运行的构建失败,或者脚本执行期间出现紧急问题。桌面应用程序可以通过弹出通知来做到这一点,但也可以通过脚本来完成!您可以使用脚本命令向自己发送桌面通知和提醒。

示例通知

图片来源:

(Tomasz Waraksa,CC BY-SA 4.0)

以下代码已在 Linux 上编写和测试。也可以通过一些努力在 macOS 上完成。有关的一些提示和技巧,请参见最后一节。

从Linux终端发送通知

要从 Linux 终端发送通知,请使用notify-send命令。它通常已作为桌面的一部分安装,但您可以运行which ``notify-send进行确认。如果尚未安装,请使用您选择的包管理器进行安装。

在 Fedora 和类似的发行版上,输入:

$ sudo dnf 安装 libnotify

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

$ sudo apt install notify-send

简单通知的几个示例:

$ notify-send "晚餐准备好了!"

$ notify-send "每日小贴士" "小睡一下怎么样?"

您可以使用紧急级别、自定义图标等选项自定义通知。通过man notify-send了解更多信息。您可以在通知正文中使用一小组 HTML 标记,以使您的消息具有良好的触感。最重要的是,URL 被呈现为可点击的。例如:

$ 通知发送 -u 关键 \

“构建失败!” \

“有 <b>123</b> 个错误。单击此处查看结果:http://buildserver/latest”

构建失败通知

图片来源:

(Tomasz Waraksa,CC BY-SA 4.0)

发送的通知会被桌面环境拾取并像任何其他通知一样显示。它们将具有相同的一致外观、感觉和行为。

将 notify-send 与 at 结合使用

Cron 通常用于定期安排命令。at命令调度一个命令在指定时间的单次执行。如果您像这样运行它,它会以交互模式启动,您可以在其中输入要在给定时间执行的命令:

$ at 12:00

这对脚本没有用。幸运的是,at接受来自标准输入的参数,因此我们可以这样使用它:

$ echo "npm run build" |现在 + 1 分钟

$ echo "备份数据库" | 13:00

指定时间的方法有很多种。从绝对时间(例如10:00)到相对时间(例如now + 2 hours),再到特殊时间(例如noonmidnight)。我们可以将它与notify-send结合起来,在未来的某个时间向自己展示提醒。例如:

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

当日停止通知

图片来源:

(Tomasz Waraksa,CC BY-SA 4.0)

提醒命令

现在,构建一个自定义 Bash 命令来向自己发送提醒。像这样简单且人性化的东西怎么样:

$ 现在提醒“我还在这里”

$提醒“该起床了!” 5分钟内

$ 1 小时后提醒“晚餐”

$ 提醒中午“休息一下”

$ 提醒“现在是星期五品脱时间!” 17:00

更多 Linux 资源

  • Linux 命令备忘单

  • 高级 Linux 命令备忘单

  • 免费在线课程:RHEL 技术概述

  • Linux 网络备忘单

  • SELinux 备忘单

  • Linux常用命令备忘单

  • 什么是 Linux 容器?

  • 我们最新的 Linux 文章

这比 Alexa 好!怎样才能得到这份美好?

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

将代码保存在某处,例如,在~/bin/remind文件中,并在您的.bashrc配置文件中获取该函数,以便在您登录时加载它:

$ source ~/bin/remind

重新加载终端,然后输入提醒查看语法。享受!

#!/usr/bin/env bash

功能提醒(){

本地 COUNT\u003d"$#"

本地命令\u003d"$1"

本地消息\u003d"$1"

本地 OP\u003d"$2"

班次 2

本地 WHEN\u003d"$@"

# 如果没有参数或帮助命令,则显示帮助

如果 [[ $COUNT -eq 0 || "$COMMAND" u003du003d "帮助" || "$COMMAND" u003du003d "--帮助" || "$COMMAND" u003du003d "-h" ]];然后

回声“命令”

echo " 提醒 <消息> <时间>"

echo " 提醒 <command>"

回声

回声“描述”

echo " 在指定时间显示通知"

回声

回声“示例”

echo ' 现在提醒“你好”

echo ' 提醒“5分钟后醒来”

echo ' 1 小时后提醒“晚餐”'

echo ' 提醒中午“休息一下”

echo ' 提醒“你准备好了吗?” 13:00'

echo ' 提醒列表'

echo ' 提醒清楚'

echo ' 提醒帮助'

回声

返回

# 检查是否存在 AT 命令

如果 !在 >/dev/null;然后

echo "提醒:AT 实用程序是必需的,但未安装在您的系统上。使用您选择的包管理器安装它,例如 'sudo apt install at'。"

返回

# 运行命令:list、clear

如果 [[ $COUNT -eq 1 ]];然后

如果 [[ "$COMMAND" u003du003d "列表" ]];然后

在 -l

elif [[ "$COMMAND" u003du003d "清除" ]];然后

在 -r $(atq | cut -f1)

别的

echo "remind: unknown command $COMMAND. 输入 'remind' 不带任何参数来查看语法。"

返回

# 确定通知时间

如果 [[ "$OP" u003du003d "在" ]];然后

本地时间\u003d"现在 + $WHEN"

elif [[ "$OP" u003du003d "at" ]];然后

本地时间\u003d"$WHEN"

elif [[ "$OP" u003du003d "现在" ]];然后

本地时间\u003d"现在"

别的

echo "提醒:无效的时间运算符 $OP"

返回

# 安排通知

echo "notify-send '$MESSAGE' '提醒' -u 关键" |在 $TIME 2>/dev/null

echo "预定在 $TIME 的通知"

}

简易通知

通过这几个简单的开源命令,您可以将自己的脚本、应用程序和任务与您的桌面集成。试试看!


本文经作者许可改编自原文,在此处找到.

Logo

更多推荐