web-dev-qa-db-fra.com

Ajout du nombre de messages non lus à l'invite de commande du terminal

Je souhaite voir le nombre de messages non lus dans mon compte de messagerie unix dans la commande Invite. Comment puis-je faire ceci?

Mise à jour: Voici la sortie de mail et mailx lorsque je me suis envoyé deux messages:

"/var/mail/alex": 2 messages 2 new 
 N   1 Alex Thu Sep 25 16:53  13/420   subject for askubuntu 1 
 N   2 Alex Thu Sep 25 16:53  13/420   subject for askubuntu 2 
3
alexoakley1

Ouvrez le fichier gedit ~/.bashrc et ajoutez ce script à la fin de celui-ci (n'oubliez pas que vous devez ajouter ce script à la fin du fichier):

NewMail(){
    NEWMAIL=$(mailx &)
    UNREAD=$(echo $NEWMAIL |grep -o 'messages.*new' | cut -f2 -d" ")
}
NewMail # call NewMail function

if [ -n "$UNREAD" ]; then
    PS1="[Hi, alex. you have $UNREAD new mail(s)] $PS1"
fi

Nous avons écrit une fonction dont le nom est NewMail.

Explication de la fonction:

Le résultat de la première ligne (NEWMAIL=$(mailx)) selon vos informations dans le corps de la question est:

"/var/mail/alex": 2 messages 2 new [...]    # if you have a new unread mail

OR

No mail for alex                            # if you don't have a new mail

Que j'ai stocké le résultat ci-dessus dans une variable NEWMAIL.

J'ai passé le résultat à la commande suivante de la deuxième ligne avec cette commande echo $NEWMAIL.

Puis avec cette commande grep -o 'messages.*new' j’obtiens le résultat entre "message" Word et "nouveau" Word, qui est: messages 2 new.

  • -o - N'imprimez que les parties correspondantes (non vides) d'une ligne correspondante, chacune de ces parties se trouvant sur une ligne de sortie distincte.

Nous avons maintenant ce résultat messages 2 new. Ensuite, je passe ce résultat à la commande suivante cut -f2 -d" ", pour obtenir uniquement le nombre de messages:

  • -f indicateur utilisé pour les champs et -f2 ne sélectionne que le deuxième champ de "messages 2 new"
  • -d" " avec un espace ici est utilisé pour le délimiteur de champ.

Ensuite, après avoir exécuté la deuxième ligne, nous avons le nombre de nouveaux messages non lus, à savoir: 2 ici.

Dans cette ligne NewMail # call NewMail function, nous appelons la fonction NewMail.

Avec cette condition if, je vérifie si vous avez un nouveau courrier. Ensuite, la commande Invite va changer et afficher: "[Hi, alex. you have # new mail(s)]" avant l'invite. Si vous n'avez pas reçu de nouveau courrier, la commande Invite ne changera pas.

if [ -n "$UNREAD" ]; then 
    PS1="[Hi, alex. you have $UNREAD new mail(s)] $PS1"
fi

-n flag avec [ -n "$UNREAD" ] vérifie si la longueur de UNREAD est Non nulle.

PS1 définit votre invite de commande à configurer dans le fichier .bashrc de votre répertoire personnel. C'est ce que nous ouvrons/modifions ce fichier. Ensuite, j'édite cela pour inclure le nombre de messages non lus avant votre invite de commande. Voir:

PS1="[Hi, alex. you have $UNREAD new mail(s)] $PS1"

Voici la capture d'écran si j'ai de nouveaux mails:

enter image description here

Et si je n'ai pas de nouveau courrier:

enter image description here

C'est ça. Copiez et collez simplement le script à la fin de votre fichier ~/.bashrc.

2
αғsнιη