Linux中國

如何從 Linux 終端發送桌面通知與提醒

有時候,來自腳本的視覺回饋是很有用的。例如,當一個腳本或計劃任務完成時,一個長期運行的構建任務失敗時,或者當腳本執行中出現了緊急問題時。桌面應用程序可以通過彈出通知來做到這一點,但腳本也可以做到這一點!你可以使用腳本命令來給自己發送桌面通知提醒

![Example notification](/data/attachment/album/202207/14/145149orngsvxddhdlgsd7.png "Example notification")

下面的代碼是在 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 <b>123</b> errors. Click here to see the results: http://buildserver/latest"

![Build fail notification](/data/attachment/album/202207/14/145150lgduxdez72us8hku.png "Build fail notification")

發送的通知會被桌面環境接收,並像其他通知一樣顯示。它們將具有相同的外觀、交互和行為。

將 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 ,再特殊時間,如noonmidnight。我們可以把它和 notify-send 結合起來,在未來的某個時間向自己發送提醒。例如:

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

![Stop for the day notification](/data/attachment/album/202207/14/145150o7i2q1ze70tzi08o.png "Stop for the day notification")

提醒的命令

現在,建立一個自定義的 Bash 命令來給自己發送提醒信息。像這樣簡單且人性化的命令:

$ remind "I&apos;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&apos;s Friday pints time!" at 17:00

這比 Alexa 更好!該怎樣做?

請看下面的代碼。它定義了一個名為 remind 的函數,它支持上述語法。實際工作是在最後兩行完成的。其餘的部分負責顯示幫助信息、參數校驗等,這與任何大型應用程序中有用的代碼與必要的白雜訊的比例大致相同。

把代碼保存在某個地方,例如,在 ~/bin/remind 文件中,並在你的 .bashrc 配置文件寫入該函數,以便在你登錄時載入它:

$ source ~/bin/remind

重新打開終端,然後輸入 remind 來查看語法。盡情享受吧!

#!/usr/bin/env bash
function 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 &apos;    remind "Hi there" now&apos;
    echo &apos;    remind "Time to wake up" in 5 minutes&apos;
    echo &apos;    remind "Dinner" in 1 hour&apos;
    echo &apos;    remind "Take a break" at noon&apos;
    echo &apos;    remind "Are you ready?" at 13:00&apos;
    echo &apos;    remind list&apos;
    echo &apos;    remind clear&apos;
    echo &apos;    remind help&apos;
    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 &apos;sudo apt install at&apos;."
    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 &apos;remind&apos; 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 &apos;$MESSAGE&apos; &apos;Reminder&apos; -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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國