Verwendung des Standardalias "alert"

9

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 alertwird 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-sendBefehl 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

registrierter Nutzer
quelle
Das einzige, woran ich denken kann, ist, das Erstellen einer Benachrichtigung zu vereinfachen ... vielleicht?
Saiarcot895
@ saiarcot895 versuchen notify-send Linux Ubuntues ist ähnlich, der einzige Unterschied ist, dass alertein Symbol angezeigt wird. Aber ich verstehe nicht, warum der Befehl sed, tail und history enthält
Registrierter Benutzer

Antworten:

8

Auf den Manpages können Sie Details zur Funktionsweise der hier kombinierten Befehle abrufen. Hier ist ein wenig über den Zweck dieser Befehle hier:

"$([ $? = 0 ] && echo terminal || echo error)"

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 -iSchalter notify-sendzum Anzeigen der Symbole.

history|tail -n1

..um den letzten Befehl ausführen zu lassen.

und sedden Text zu analysieren, um ihn mit einer notify-sendNachricht anzuzeigen .


Um diese zu verstehen, versuchen Sie Folgendes:

true; echo "$([ $? = 0 ] && echo terminal || echo error)"

..dies würde Terminal Echo .

false; echo "$([ $? = 0 ] && echo terminal || echo error)"

..dies würde Fehler widerhallen .

notify-send -i terminal 'Please note the icon..' 'the default icon for the terminal has been used. You can specify any other icon of your choice'

Und,

echo $?

..ist sehr nützlich, um den Exit-Wert des zuletzt ausgeführten Befehls zu kennen.

echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."

..nested echoals einfache Demo zur Verwendung $()in einer Befehlskombination.

präzise
quelle
1
Mit diesem Alias ​​kann dem Benutzer mitgeteilt werden, ob der Befehl erfolgreich ausgeführt wurde oder fehlgeschlagen ist, jedoch auf grafische Weise.
Registrierter Benutzer
Ja, es würde sowohl über die erfolgreichen als auch über die erfolglosen Ausführungen grafisch mit dem notify-send.. benachrichtigen . Der Exit-Status des letzten Befehls wird mit dem Wert von $?.. überprüft. Ich habe dies in die Bearbeitung aufgenommen ..
genau
7

Lassen Sie mich versuchen zu erklären, was hier passiert:

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

1 --urgency=low

-u, --urgency = LEVEL Gibt die Dringlichkeitsstufe an (niedrig, normal, kritisch).

2 -i "$([ $? = 0 ] && echo terminal || echo error)" .

  -i, --icon=ICON[,ICON...]
         Specifies an icon filename or stock icon to display.

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:

echo "Hello alert" | alert

Es wird eine Warnung mit dem vorherigen Befehl angezeigt.

c0rp
quelle
3

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; alertwird eine Benachrichtigung über den Befehl ( sleep 10in 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>; alertdem 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).

Chesedo
quelle
0

Der Grund dafür sedist tail, historydass 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 werden history, um die Liste aller eingegebenen Daten abzurufen, tail -n1um 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 $? = 0wahr 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.

saiarcot895
quelle
Der Alarm wird nicht beseitigt , sondern bleibt in der Benachrichtigung.
Registrierter Benutzer
1
Wenn Sie mit "aus irgendeinem Grund" antworten, ist dies oft keine sehr gute Antwort;)
Requist
@Requist: Ich habe "aus irgendeinem Grund" für diese spezielle Anweisung hinzugefügt, weil ich den Eindruck hatte, dass $0Sie das erste Argument für einen Befehl erhalten. Bei einem Alias ​​kann dies jedoch anders sein.
Saiarcot895