Envoyer des notifications et des rappels sur le bureau depuis le terminal Linux

Parfois, il est utile d’obtenir un retour visuel d’un script. Par exemple, lorsqu’un script ou une tâche cron se termine, une génération de longue durée échoue ou il y a un problème urgent lors de l’exécution du script. Les applications de bureau peuvent le faire avec des notifications contextuelles, mais cela peut aussi être fait à partir d’un script ! Vous pouvez utiliser des commandes de script pour vous envoyer des notifications et des rappels sur le bureau.
Le code ci-dessous a été écrit et testé sur Linux. Cela peut également être fait sur macOS avec un peu d’effort. Voir la dernière section pour quelques trucs et astuces.
Contents
Envoi de notifications depuis le terminal Linux
Pour envoyer des notifications depuis le terminal Linux, utilisez le notify-send
commander. Courir which
notify-send
pour voir s’il est présent sur votre système. Sinon, installez-le avec le gestionnaire de paquets de votre choix.
Sur Fedora, tapez :
$ sudo dnf install notify-send
Sur les distributions basées sur Debian, tapez :
$ sudo apt install notify-send
Quelques exemples de notifications simples :
$ notify-send "Dinner ready!"
$ notify-send "Tip of the Day" "How about a nap?"
Vous pouvez personnaliser la notification avec des options telles que le niveau d’urgence, l’icône personnalisée, etc. En savoir plus avec man notify-send
. Vous pouvez utiliser un petit ensemble de balises HTML dans le corps de notification pour donner une touche agréable à vos messages. En plus de cela, les URL sont rendues cliquables. Par example:
$ notify-send -u critical
"Build failed!"
"There were <b>123</b> errors. Click here to see the results: http://buildserver/latest"
Les notifications envoyées sont récupérées par l’environnement de bureau et affichées comme n’importe quelle autre notification. Ils auront la même apparence, la même sensation et le même comportement.
Combinez notification-envoi avec à
Cron est couramment utilisé pour planifier des commandes à intervalles réguliers. le at
La commande planifie l’exécution unique d’une commande à un moment spécifié. Si vous l’exécutez comme ceci, il démarre en mode interactif, où vous pouvez entrer des commandes à exécuter à un moment donné :
$ at 12:00
Ce n’est pas utile pour les scripts. Heureusement, at
accepte les paramètres de l’entrée standard afin que nous puissions l’utiliser de cette façon :
$ echo "npm run build" | at now + 1 minute
$ echo "backup-db" | at 13:00
Il existe de nombreuses façons de spécifier le temps. Du temps absolu, comme 10:00
par le temps relatif, comme now + 2 hours
, à des moments particuliers comme noon
ou midnight
. Nous pouvons le combiner avec notify-send
pour nous montrer des rappels à un moment donné dans le futur. Par example:
$ echo "notify-send 'Stop it and go home now?' 'Enough work for today.' -u critical" | at now
La commande de rappel
Maintenant, créez une commande Bash personnalisée pour vous envoyer des rappels. Que diriez-vous de quelque chose d’aussi simple et convivial que :
$ 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
C’est mieux qu’Alexa ! Comment obtenir cette bonté ?
Voir le code ci-dessous. Il définit une fonction shell appelée rappeler, qui prend en charge la syntaxe ci-dessus. Le travail proprement dit se fait dans les deux dernières lignes. Le reste est responsable de l’aide, de la validation des paramètres, etc., ce qui correspond à peu près à la proportion de code utile par rapport au bruit blanc nécessaire dans toute grande application.
Enregistrez le code quelque part, par exemple, dans le ~/bin/remind
fichier et sourcez la fonction dans votre .bashrc
profil afin qu’il soit chargé lorsque vous vous connectez :
$ source ~/bin/remind
Rechargez le terminal, puis tapez rappeler pour voir la syntaxe. Profitez!
#!/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"
}
Notifications faciles
Avec ces quelques commandes open source simples, vous pouvez intégrer vos propres scripts, applications et tâches à votre bureau. Essaye le!
Cet article a été adapté avec la permission de l’auteur de l’article original, trouvé ici.