Verwendung des Standardalias "alert"

8

Der Standardalias Warnung 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$//'\'')"

Das Ausführen von alert gibt eine Benachrichtigung mit dem Text Alarm und einem Terminalsymbol. Die Ausführung mit einem Parameter wie alert !!!!! gibt eine Benachrichtigung mit dem Text Alarm !!!!! und !!!!! .

Also, was ist der Unterschied zwischen dem einfachen Befehl notify-send und diesem komplexen Alias, der notify-send, echo, history, tail und sed verwendet?

In welchen Situationen ist dieser Alias ​​nützlich oder wurde er nur für Wortspiele erstellt? (So wie sudo sudo sudo sudo sudo apt-get install

verwenden

Ich benutze Ubuntu 12.10

    
Registered User 20.02.2014, 14:02

4 Antworten

8

Sie könnten die man-Seiten verwenden, um Details darüber zu erhalten, was die hier kombinierten Befehle tun. Hier ein wenig über den Zweck dieser Befehle hier:

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

Dies würde echo terminal oder error entsprechend dem Ausführungsstatus - erfolgreich oder fail des letzter Befehl; und das Ergebnis ist wie der Wert für den -i Schalter von notify-send für die Anzeige der Icons.

history|tail -n1

.. um den letzten Befehl auszuführen.

und sed , um den Text zu analysieren, um ihn mit notify-send message anzuzeigen.

Um diese zu verstehen, versuchen Sie Folgendes:

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

.. dies würde echo terminal .

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

.. das würde echo Fehler zurückgeben.

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 Ausgangswert des letzten 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 echo als einfache Demo zur Verwendung von $() in einem Befehlskombo.

    
precise 20.02.2014, 14:36
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 (niedrig, normal, kritisch) an.

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 Befehl exit code 0 war, ohne Fehler. Oder gibt "error" zurück, wenn der Exit-Code nicht 0 ist.

Und schließlich bekommen wir "Terminal" oder "Fehler" -Symbol.

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 Blöcken von sed getrennt werden.

3.1. sed 's/^\s*[0-9]\+\s*//' entfernen Sie alle vorherigen Leerzeichen und Tabs, alle danach numerisch und entfernen Sie auch Leerzeichen und Tabulatoren am Ende.

3.2. s/[;&|]\s*alert$// entfernt die vorhergehenden Symbole ; & | , alle Registerkarten und Leerzeichen und das Wort "alert".

Es ist nur sauber zuletzt ausgeführte Befehl von Symbolen und das Wort "Warnung" am Ende.

Wenn Sie also etwas wie dieses verwenden:

echo "Hello alert" | alert

Es wird eine Warnung mit dem vorherigen Befehl angezeigt.

    
c0rp 20.02.2014 15:09
2

Ich denke, die aktuellen Antworten erklären wie das innere Funktionieren der Alarmierungsarbeit (was ich aus Neugierde herausfinden wollte und was mich hierher gebracht hat). Aber ich denke, das ursprüngliche OP fragt nach was es nützlich ist, für das ich versuchen werde, es so zu erklären, wie ich es aus den Empfehlungen über seiner Erklärung verstehe.

Es wird im Grunde verwendet, um Sie zu warnen, wenn ein Befehl beendet ist, wenn Sie nicht sitzen können und das Terminal die ganze Zeit warten, bis es fertig ist. Gemäß dem empfohlenen Beispiel zeigt sleep 10; alert eine Benachrichtigung des Befehls ( sleep 10 in diesem Fall) mit einem Terminalsymbol an, wenn es erfolgreich ist (10 Sekunden dauert 10 Sekunden).

Hier sehen Sie, dass es als <command>; alert verwendet werden sollte, wo Sie den Befehl durch Ihren Befehl ersetzen. Ich persönlich muss jeden Tag ein Video über wget herunterladen, weil es regelmäßig fehlschlägt. Also füge ich einfach den Download-Befehl mit der Warnung an, um mich sofort zu benachrichtigen, wenn es fehlgeschlagen ist, so dass es wieder fortgesetzt werden kann (meine Warnung wird geändert, um auch meine Aufmerksamkeit zu beepen).

    
chesedo 01.10.2014 13:21
0

Der Grund dafür liegt darin, dass sed , tail und history die von Ihnen eingegebene Nachricht abrufen müssen. (Aus irgendeinem Grund), was Sie eingegeben haben, ist nicht direkt über eine Variable verfügbar. Daher muss history verwendet werden, um die Liste aller eingegebenen Daten zu erhalten, tail -n1 , um das letzte Wort zu erhalten, das Sie eingegeben haben, und einige Regex, um den "alert" -Befehl am Anfang loszuwerden.

Nur um dies zu erweitern, gibt es dort einen bedingten Befehl, der testet, ob $? = 0 wahr ist. Von dem, was ich sagen kann, wenn es wahr ist, dann kommt es vom Terminal und sollte als eine normale Nachricht betrachtet werden. Andernfalls sollte es als Fehler betrachtet werden und ein Fehlersymbol erscheint.

    
saiarcot895 20.02.2014 14:27

Tags und Links