Utilisation de l'alias par défaut «alerte»

9

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 alertdonne 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-sendcommande 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

Utilisateur enregistré
la source
La seule chose à laquelle je peux penser est simplement de faciliter la création d'une notification ... peut-être?
saiarcot895
@ saiarcot895 essayez notify-send Linux Ubuntuc'est à peu près la même chose, la seule différence est qu'elle alertmontre une icône, mais je ne comprends pas pourquoi la commande contient sed, tail et history
Utilisateur enregistré le

Réponses:

8

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:

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

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 -icommutateur notify-sendpour afficher les icônes.

history|tail -n1

..pour exécuter la dernière commande.

et sedd'analyser le texte pour l'afficher avec un notify-sendmessage.


Pour les comprendre, essayez ce qui suit:

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

..ce serait l'écho du terminal .

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

..cela ferait écho à l' erreur .

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'

Et,

echo $?

..est très utile pour connaître la valeur de sortie de la dernière commande exécutée.

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

..imbriqué echocomme une démo simple à utiliser $()dans un combo de commandes.

précis
la source
1
cet alias peut donc être utilisé pour indiquer à l'utilisateur si la commande a été exécutée avec succès ou a échoué, mais de manière graphique.
Utilisateur enregistré le
oui, il notifierait graphiquement les exécutions réussies ou infructueuses en utilisant 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 ..
précis
7

Permettez-moi d'essayer d'expliquer ce qui se passe ici:

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 Spécifie le niveau d'urgence (faible, normal, critique).

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

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

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:

echo "Hello alert" | alert

Il affichera une alerte avec la commande précédente.

c0rp
la source
3

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 10dans 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>; alertendroit 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).

chesedo
la source
0

La raison sed, tailet historysont 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 utiliser historypour obtenir la liste de tout ce que vous avez tapé, tail -n1pour 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 $? = 0c'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.

saiarcot895
la source
Il ne supprime pas l' alerte , il restera dans la notification.
Utilisateur enregistré le
1
Si vous répondez par "pour une raison quelconque", ce n'est souvent pas une très bonne réponse;)
Requist
@Requist: J'ai ajouté "pour une raison quelconque" pour cette déclaration spécifique parce que j'avais l'impression que $0vous donne le premier argument pour une commande. Cependant, cela pourrait être différent dans le cas d'un alias.
saiarcot895