Il est parfois 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 également ê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.
Envoi de notifications depuis le terminal Linux
Pour envoyer des notifications depuis le terminal Linux, utilisez le notify-send
commande. Il est souvent déjà installé sur votre bureau, mais vous pouvez exécuter which
notify-send
confirmer. S'il n'est pas encore installé, installez-le avec le gestionnaire de packages de votre choix.
Sur Fedora et les distributions similaires, tapez :
$ sudo dnf install libnotify
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 la notification pour donner une touche agréable à vos messages. De plus, les URL sont rendues cliquables. Par exemple :
$ 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.
Combiner notifier-envoyer avec at
Cron est couramment utilisé pour programmer des commandes à intervalles réguliers. Le at
commande planifie l'exécution unique d'une commande à une heure spécifiée. 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. À partir de l'heure absolue, comme 10:00
dans le temps relatif, comme now + 2 hours
, à des heures particulières telles que noon
ou midnight
. Nous pouvons le combiner avec notify-send
pour nous montrer des rappels à un moment donné dans le futur. Par exemple :
$ echo "notify-send 'Stop it and go home now?' 'Enough work for today.' -u critical" | at now
La commande de rappel
Créez maintenant 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
Plus de ressources Linux
- Aide-mémoire des commandes Linux
- Aide-mémoire des commandes Linux avancées
- Cours en ligne gratuit :Présentation technique de RHEL
- Aide-mémoire sur le réseau Linux
- Aide-mémoire SELinux
- Aide-mémoire sur les commandes courantes de Linux
- Que sont les conteneurs Linux ?
- Nos derniers articles Linux
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 pour qu'il soit chargé lorsque vous vous connectez :
$ source ~/bin/remind
Rechargez le terminal, puis tapez rappel pour voir la syntaxe. Amusez-vous !
#!/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. Essayez-le !
Cet article a été adapté avec la permission de l'auteur de l'article original, trouvé ici.