GNU/Linux >> Linux の 問題 >  >> Linux

Linuxターミナルからデスクトップ通知とリマインダーを送信する

スクリプトから視覚的なフィードバックを取得すると便利な場合があります。たとえば、スクリプトまたはcronジョブが完了すると、長時間実行されるビルドが失敗したり、スクリプトの実行中に緊急の問題が発生したりします。デスクトップアプリケーションはポップアップ通知を使用してこれを実行できますが、スクリプトからも実行できます。スクリプトコマンドを使用して、デスクトップの通知とリマインダーを自分に送信できます。

以下のコードは、Linuxで記述およびテストされています。少し手間をかけてmacOSでも実行できます。ヒントとヒントについては、最後のセクションを参照してください。

Linuxターミナルからの通知の送信

Linuxターミナルから通知を送信するには、notify-sendを使用します 指図。多くの場合、デスクトップの一部としてすでにインストールされていますが、which を実行できます。 notify-send 確認するために。まだインストールされていない場合は、選択したパッケージマネージャーを使用してインストールしてください。

Fedoraおよび同様のディストリビューションで、次のように入力します:

$ sudo dnf install libnotify

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"

送信された通知はデスクトップ環境で取得され、他の通知と同じように表示されます。それらは同じ一貫した外観、感触、および動作を持ちます。

通知と送信を組み合わせる

cronは通常、コマンドを定期的にスケジュールするために使用されます。 at commandは、指定された時間にコマンドの1回の実行をスケジュールします。このように実行すると、インタラクティブモードで起動し、特定の時間に実行するコマンドを入力できます。

$ at 12:00

これはスクリプトには役立ちません。幸いなことに、at このように使用できるように、標準入力からパラメータを受け入れます:

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

時間を指定する方法はたくさんあります。 10:00などの絶対時間から now + 2 hoursなどの相対的な時間 、noonなどの特別な時間に またはmidnightnotify-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

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

これはAlexaよりも優れています!この良さを得るには?

以下のコードを参照してください。 リマインダーと呼ばれるシェル関数を定義します 、上記の構文をサポートします。実際の作業は最後の2行で行われます。残りは、ヘルプ、パラメータ検証などを担当します。これは、大規模なアプリケーションで有用なコードと必要なホワイトノイズの比率にほぼ一致します。

コードをどこかに保存します。たとえば、~/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 '    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"
}

簡単な通知

これらのいくつかの単純なオープンソースコマンドを使用して、独自のスクリプト、アプリケーション、およびタスクをデスクトップに統合できます。試してみてください!


この記事は、ここにある元の記事の著者の許可を得て作成されています。


Linux
  1. mysql にログインして Linux ターミナルからデータベースにクエリを実行する方法

  2. Linux ターミナルから Windows マシンをシャットダウンする

  3. Linux 端末からメールを 1 行で送信する

  1. mailコマンドを使用してLinuxターミナルまたはスクリプトから電子メールを送信する

  2. OBS Studio –Linuxデスクトップからのビデオの録画とライブストリーム

  3. Linux から添付ファイルと本文を含むメールを送信する方法

  1. Linux端末からの画像のサイズを変更します

  2. Linux端末からファイルを印刷する

  3. SSMTPを使用してLinuxターミナルから電子メールを送信する方法