Manchmal ist es nützlich, visuelles Feedback von einem Skript zu erhalten. Wenn beispielsweise ein Skript oder ein Cron-Job abgeschlossen wird, ein lang andauernder Build fehlschlägt oder während der Skriptausführung ein dringendes Problem auftritt. Desktop-Anwendungen können dies mit Popup-Benachrichtigungen tun, aber es kann auch über ein Skript erfolgen! Sie können Skriptbefehle verwenden, um sich Desktop-Benachrichtigungen und Erinnerungen zu senden.
Der folgende Code wurde unter Linux geschrieben und getestet. Es ist mit etwas Aufwand auch unter macOS möglich. Im letzten Abschnitt finden Sie einige Hinweise und Tipps.
Benachrichtigungen vom Linux-Terminal senden
Um Benachrichtigungen vom Linux-Terminal zu senden, verwenden Sie notify-send
Befehl. Es ist oft bereits als Teil Ihres Desktops installiert, aber Sie können which
ausführen notify-send
bestätigen. Wenn es noch nicht installiert ist, installieren Sie es mit dem Paketmanager Ihrer Wahl.
Geben Sie bei Fedora und ähnlichen Distributionen Folgendes ein:
$ sudo dnf install libnotify
Geben Sie bei Debian-basierten Distributionen Folgendes ein:
$ sudo apt install notify-send
Einige Beispiele für einfache Benachrichtigungen:
$ notify-send "Dinner ready!"
$ notify-send "Tip of the Day" "How about a nap?"
Sie können die Benachrichtigung mit Optionen wie Dringlichkeitsstufe, benutzerdefiniertem Symbol usw. anpassen. Erfahren Sie mehr mit man notify-send
. Sie können eine kleine Gruppe von HTML-Tags im Benachrichtigungstext verwenden, um Ihren Nachrichten eine nette Note zu verleihen. Darüber hinaus werden URLs als anklickbar gerendert. Zum Beispiel:
$ notify-send -u critical \
"Build failed!" \
"There were <b>123</b> errors. Click here to see the results: http://buildserver/latest"
Gesendete Benachrichtigungen werden von der Desktop-Umgebung abgeholt und wie jede andere Benachrichtigung angezeigt. Sie haben das gleiche konsistente Aussehen, Gefühl und Verhalten.
Kombiniere Notify-Send mit at
Cron wird häufig verwendet, um Befehle in regelmäßigen Abständen zu planen. Der at
command plant die einmalige Ausführung eines Befehls zu einem bestimmten Zeitpunkt. Wenn Sie es so ausführen, startet es im interaktiven Modus, wo Sie Befehle eingeben können, die zu einem bestimmten Zeitpunkt ausgeführt werden sollen:
$ at 12:00
Dies ist für Skripte nicht sinnvoll. Zum Glück at
akzeptiert Parameter von der Standardeingabe, damit wir sie auf diese Weise verwenden können:
$ echo "npm run build" | at now + 1 minute
$ echo "backup-db" | at 13:00
Es gibt viele Möglichkeiten, die Zeit anzugeben. Aus absoluter Zeit, z. B. 10:00
durch relative Zeit, wie z. B. now + 2 hours
, zu besonderen Zeiten wie noon
oder midnight
. Wir können es mit notify-send
kombinieren um uns irgendwann in der Zukunft Erinnerungen zu zeigen. Zum Beispiel:
$ echo "notify-send 'Stop it and go home now?' 'Enough work for today.' -u critical" | at now
Der Erinnerungsbefehl
Erstellen Sie jetzt einen benutzerdefinierten Bash-Befehl, um sich selbst Erinnerungen zu senden. Wie wäre es mit etwas so Einfachem und Menschenfreundlichem wie:
$ 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
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Das ist besser als Alexa! Wie bekommt man diese Güte?
Siehe Code unten. Es definiert eine Shell-Funktion namens erinnern , die die obige Syntax unterstützt. Die eigentliche Arbeit wird in den letzten beiden Zeilen erledigt. Der Rest ist für Hilfe, Parametervalidierung usw. verantwortlich, was ungefähr dem Verhältnis von nützlichem Code zu notwendigem weißem Rauschen in jeder großen Anwendung entspricht.
Speichern Sie den Code irgendwo ab, zum Beispiel im ~/bin/remind
Datei, und beziehen Sie die Funktion in Ihre .bashrc
Profil, damit es geladen wird, wenn Sie sich anmelden:
$ source ~/bin/remind
Laden Sie das Terminal neu und geben Sie dann Reminder ein, um die Syntax anzuzeigen. Viel Spaß!
#!/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"
}
Einfache Benachrichtigungen
Mit diesen wenigen einfachen Open-Source-Befehlen können Sie Ihre eigenen Skripte, Anwendungen und Aufgaben in Ihren Desktop integrieren. Probieren Sie es aus!
Dieser Artikel wurde mit Genehmigung des Autors aus dem Originalartikel angepasst, der hier zu finden ist.