Der Standardalias Alert ist für den Befehl
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"
Beim Ausführen alert
wird eine Benachrichtigung mit Textalarm und einem Terminalsymbol angezeigt. Das Ausführen mit einem Parameter wie alert !!!!!
gibt eine Benachrichtigung mit Text Alert !!!!! und !!!!! .
Was ist der Unterschied zwischen einem einfachen notify-send
Befehl und diesem komplexen Alias, der Notify-Send, Echo, Verlauf, Tail und Sed verwendet ?
In welchen Situationen ist dieser Alias nützlich oder wurde er nur für Wortspiele erstellt? sudo sudo sudo sudo sudo apt-get install
Ich benutze Ubuntu 12.10
bash
notification
registrierter Nutzer
quelle
quelle
notify-send Linux Ubuntu
es ist ähnlich, der einzige Unterschied ist, dassalert
ein Symbol angezeigt wird. Aber ich verstehe nicht, warum der Befehl sed, tail und history enthältAntworten:
Auf den Manpages können Sie Details zur Funktionsweise der hier kombinierten Befehle abrufen. Hier ist ein wenig über den Zweck dieser Befehle hier:
Dies würde ein Terminal oder einen Fehler gemäß dem Ausführungsstatus wiedergeben - erfolgreich bzw. fehlgeschlagen des letzten Befehls; und das Ergebnis ist der Wert für den
-i
Schalternotify-send
zum Anzeigen der Symbole...um den letzten Befehl ausführen zu lassen.
und
sed
den Text zu analysieren, um ihn mit einernotify-send
Nachricht anzuzeigen .Um diese zu verstehen, versuchen Sie Folgendes:
..dies würde Terminal Echo .
..dies würde Fehler widerhallen .
Und,
..ist sehr nützlich, um den Exit-Wert des zuletzt ausgeführten Befehls zu kennen.
..nested
echo
als einfache Demo zur Verwendung$()
in einer Befehlskombination.quelle
notify-send
.. benachrichtigen . Der Exit-Status des letzten Befehls wird mit dem Wert von$?
.. überprüft. Ich habe dies in die Bearbeitung aufgenommen ..Lassen Sie mich versuchen zu erklären, was hier passiert:
1
--urgency=low
2
-i "$([ $? = 0 ] && echo terminal || echo error)"
.Dieser Teil
"$([ $? = 0 ] && echo terminal || echo error)"
.$?
ist der letzte zurückgegebene Fehler (oder Erfolg). Es gibt also den Text "terminal" zurück, wenn der letzte Befehlsexitcode 0 war, ohne Fehler. Oder gibt "Fehler" zurück, wenn der Exit-Code nicht 0 war.Und schließlich erhalten wir das Symbol "Terminal" oder "Fehler".
3
$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
history|tail -n1
Gibt den letzten Befehl aus dem Verlauf zurück.sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
Dies kann in 2 Block Sed getrennt werden.3.1.
sed 's/^\s*[0-9]\+\s*//'
Entfernen Sie alle vorhergehenden Leerzeichen und Tabulatoren, danach alle numerischen, und entfernen Sie am Ende auch Leerzeichen und Tabulatoren.3.2.
s/[;&|]\s*alert$//
Entfernt vorhergehende Symbole;
&
|
, Tabulatoren und Leerzeichen sowie das Wort "alert".Es ist nur der letzte zuletzt ausgeführte Befehl von Symbolen und das Wort "alert" am Ende.
Wenn Sie also so etwas verwenden:
Es wird eine Warnung mit dem vorherigen Befehl angezeigt.
quelle
Ich denke, die aktuellen Antworten erklären, wie das Innenleben von Alarm funktioniert (was ich aus Neugier herausfinden wollte und was mich hierher brachte). Aber ich denke, das ursprüngliche OP fragt nach dem Nützlichen, wofür ich versuchen werde zu erklären, wie ich es aus den Empfehlungen über seiner Erklärung verstehe.
Es wird im Grunde genommen verwendet, um Sie zu benachrichtigen, wenn ein Befehl beendet wurde, wenn Sie nicht die ganze Zeit auf das Terminal warten können, bis es beendet ist. Gemäß dem Empfehlungsbeispiel
sleep 10; alert
wird eine Benachrichtigung über den Befehl (sleep 10
in diesem Fall) mit einem Terminalsymbol angezeigt, wenn er erfolgreich ist (der Ruhezustand 10 dauert 10 Sekunden).Daraus können Sie ersehen, dass es als Ort verwendet werden sollte, an
<command>; alert
dem Sie den Befehl durch Ihren Befehl ersetzen. Ich persönlich muss jeden Tag ein Video über wget herunterladen, da es regelmäßig fehlschlägt. Daher füge ich den Download-Befehl einfach mit Warnung hinzu, um mich sofort zu benachrichtigen, wenn er fehlgeschlagen ist, damit er wieder fortgesetzt werden kann (meine Warnung wird so geändert, dass auch ein Piepton ertönt, um meine Aufmerksamkeit zu erregen).quelle
Der Grund dafür
sed
isttail
,history
dass die eingegebene Nachricht abgerufen werden muss. (Aus irgendeinem Grund) ist das, was Sie eingegeben haben, über keine Variable direkt verfügbar. Daher muss es verwendet werdenhistory
, um die Liste aller eingegebenen Daten abzurufen,tail -n1
um das zuletzt eingegebene Element abzurufen, und um einen regulären Ausdruck zu erhalten, um den Befehl "alert" zu Beginn zu entfernen.Um dies zu erweitern, gibt es dort einen bedingten Befehl, der prüft, ob er
$? = 0
wahr ist. Soweit ich weiß, kommt es vom Terminal, wenn es wahr ist, und sollte als normale Nachricht angesehen werden. Andernfalls sollte dies als Fehler betrachtet werden und ein Fehlersymbol wird angezeigt.quelle
$0
Sie das erste Argument für einen Befehl erhalten. Bei einem Alias kann dies jedoch anders sein.