L'alias par défaut Alert est pour la commande
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"
L'exécution alert
donne une notification avec une alerte texte et une icône de terminal. L'exécuter avec un paramètre comme alert !!!!!
donne une notification avec une alerte texte !!!!! et !!!!! .
Alors, quelle est la différence entre une notify-send
commande simple et cet alias complexe qui utilise notify-send, echo, history, tail et sed ?
Dans quelles situations cet alias est-il utile ou a-t-il été simplement créé pour le jeu de mots (quelque chose comme sudo sudo sudo sudo sudo apt-get install
J'utilise Ubuntu 12.10
bash
notification
Utilisateur enregistré
la source
la source
notify-send Linux Ubuntu
c'est à peu près la même chose, la seule différence est qu'ellealert
montre une icône, mais je ne comprends pas pourquoi la commande contient sed, tail et historyRéponses:
Vous pouvez utiliser les pages de manuel pour obtenir des détails sur ce que font les commandes combinées ici. Voici un peu plus sur le but de ces commandes ici:
Cela ferait écho au terminal ou à l' erreur selon l'état d'exécution - réussi ou échoué respectivement de la dernière commande; et le résultat est la valeur du
-i
commutateurnotify-send
pour afficher les icônes...pour exécuter la dernière commande.
et
sed
d'analyser le texte pour l'afficher avec unnotify-send
message.Pour les comprendre, essayez ce qui suit:
..ce serait l'écho du terminal .
..cela ferait écho à l' erreur .
Et,
..est très utile pour connaître la valeur de sortie de la dernière commande exécutée.
..imbriqué
echo
comme une démo simple à utiliser$()
dans un combo de commandes.la source
notify-send
.. l'état de sortie de la dernière commande est vérifié avec la valeur de$?
..J'ai inclus cela dans l'édition ..Permettez-moi d'essayer d'expliquer ce qui se passe ici:
1
--urgency=low
2
-i "$([ $? = 0 ] && echo terminal || echo error)"
.Cette partie
"$([ $? = 0 ] && echo terminal || echo error)"
.$?
est la dernière erreur (ou réussite) renvoyée. Il renvoie donc le texte "terminal" si le dernier code de sortie de commande était 0, sans erreur. Ou renvoie "erreur" si le code de sortie n'était pas 0.Et enfin, nous obtenons l'icône "terminal" ou "erreur".
3
$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
history|tail -n1
renvoie la dernière commande de l'historique.sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
cela peut être séparé en 2 blocs de sed.3.1.
sed 's/^\s*[0-9]\+\s*//'
supprimez tous les espaces et tabulations précédents, tous numériques après cela, et supprimez également les espaces et tabulations à la fin.3.2.
s/[;&|]\s*alert$//
supprime les symboles précédents;
&
|
, les tabulations et les espaces et le mot "alerte".C'est juste la dernière commande exécutée à partir des symboles, et le mot "alerte" à la fin.
Donc, si vous utilisez quelque chose comme ça:
Il affichera une alerte avec la commande précédente.
la source
Je pense que les réponses actuelles expliquent comment le fonctionnement interne du travail d'alerte (qui est ce que je voulais savoir par curiosité et qui me sont arrivés ici). Mais je pense que le PO original demande ce qu'il est utile pour lequel je vais essayer d'expliquer, si je comprends bien des félicitations ci-dessus sa déclaration.
Il est essentiellement utilisé pour vous alerter lorsqu'une commande est terminée lorsque vous ne pouvez pas rester assis à regarder le terminal tout le temps en attendant qu'il se termine. Selon l'exemple de recommandation
sleep 10; alert
, une notification de la commande (sleep 10
dans ce cas) s'affiche avec une icône de terminal si elle réussit (sommeil 10 prendra 10 secondes pour terminer).De cela, vous pouvez voir qu'il doit être utilisé comme
<command>; alert
endroit où vous remplacez la commande par votre commande. Personnellement, je dois télécharger une vidéo tous les jours via wget car elle échoue périodiquement. J'ajoute donc juste la commande de téléchargement avec une alerte pour m'avertir immédiatement quand elle a échoué afin qu'elle puisse être poursuivie à nouveau (mon alerte est modifiée pour bip également pour attirer mon attention).la source
La raison
sed
,tail
ethistory
sont là parce qu'il doit obtenir le message que vous avez tapé. (Pour une raison quelconque), ce que vous avez tapé n'est directement disponible via aucune variable. Par conséquent, il doit utiliserhistory
pour obtenir la liste de tout ce que vous avez tapé,tail -n1
pour obtenir la dernière chose que vous avez tapée, et quelques regex pour se débarrasser de la commande "alert" au début.Juste pour développer cela, il y a une commande conditionnelle qui teste pour voir si
$? = 0
c'est vrai. D'après ce que je peux dire, si c'est vrai, cela vient du terminal et devrait être considéré comme un message normal. Sinon, cela devrait être considéré comme une erreur et une icône d'erreur apparaîtra.la source
$0
vous donne le premier argument pour une commande. Cependant, cela pourrait être différent dans le cas d'un alias.