Někdy je užitečné získat vizuální zpětnou vazbu ze skriptu. Když se například dokončí úloha skriptu nebo cron, selže dlouhotrvající sestavení nebo dojde k naléhavému problému během provádění skriptu. Desktopové aplikace to umí s vyskakovacími upozorněními, ale lze to udělat i ze skriptu! Pomocí příkazů skriptu si můžete posílat oznámení a připomenutí na plochu.
Níže uvedený kód byl napsán a testován na Linuxu. S trochou úsilí to lze provést také v systému macOS. Několik rad a tipů naleznete v poslední části.
Odesílání upozornění z terminálu Linux
Chcete-li odesílat upozornění z terminálu Linux, použijte notify-send
příkaz. Často je již nainstalován jako součást vaší plochy, ale můžete spustit which
notify-send
potvrdit. Pokud ještě není nainstalován, nainstalujte jej pomocí zvoleného správce balíčků.
Ve Fedoře a podobných distribucích zadejte:
$ sudo dnf install libnotify
V distribucích založených na Debianu zadejte:
$ sudo apt install notify-send
Několik příkladů jednoduchých oznámení:
$ notify-send "Dinner ready!"
$ notify-send "Tip of the Day" "How about a nap?"
Oznámení si můžete přizpůsobit pomocí možností, jako je úroveň naléhavosti, vlastní ikona a tak dále. Zjistěte více pomocí man notify-send
. V těle oznámení můžete použít malou sadu značek HTML, aby vaše zprávy vypadaly pěkně. Kromě toho se adresy URL vykreslují jako klikatelné. Například:
$ notify-send -u critical \
"Build failed!" \
"There were <b>123</b> errors. Click here to see the results: http://buildserver/latest"
Odeslaná upozornění přebírá prostředí plochy a zobrazuje je stejně jako jakékoli jiné upozornění. Budou mít stejný konzistentní vzhled, dojem a chování.
Kombinovat upozornění-odeslat s na
Cron se běžně používá k plánování příkazů v pravidelných intervalech. at
příkaz naplánuje jedno provedení příkazu v určený čas. Pokud jej spustíte takto, spustí se v interaktivním režimu, kde můžete zadávat příkazy, které se mají v daný čas provést:
$ at 12:00
To není užitečné pro skripty. Naštěstí at
přijímá parametry ze standardního vstupu, abychom jej mohli použít takto:
$ echo "npm run build" | at now + 1 minute
$ echo "backup-db" | at 13:00
Existuje mnoho způsobů, jak určit čas. Z absolutního času, například 10:00
přes relativní čas, například now + 2 hours
, na zvláštní časy, jako je noon
nebo midnight
. Můžeme to zkombinovat s notify-send
abychom si někdy v budoucnu ukázali upomínky. Například:
$ echo "notify-send 'Stop it and go home now?' 'Enough work for today.' -u critical" | at now
Příkaz připomenutí
Nyní si vytvořte vlastní příkaz Bash pro posílání připomenutí. Co takhle něco tak jednoduchého a lidsky přátelského jako:
$ 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
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Tohle je lepší než Alexa! Jak tuto dobrotu získat?
Viz kód níže. Definuje funkci shellu nazvanou připomenout , který podporuje výše uvedenou syntaxi. Vlastní práce se provádí v posledních dvou řádcích. Zbytek je zodpovědný za nápovědu, validaci parametrů atd., což zhruba odpovídá poměru užitečného kódu vs. nezbytný bílý šum v jakékoli velké aplikaci.
Uložte kód někam, například do ~/bin/remind
a zdroj funkce ve vašem .bashrc
profil, aby se načetl při přihlášení:
$ source ~/bin/remind
Znovu načtěte terminál a poté zadejte připomenutí, abyste viděli syntaxi. Užijte si to!
#!/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"
}
Snadná upozornění
Pomocí těchto několika jednoduchých příkazů s otevřeným zdrojovým kódem můžete integrovat své vlastní skripty, aplikace a úlohy na plochu. Vyzkoušejte to!
Tento článek byl se svolením autora upraven z původního článku, který najdete zde.