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
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
.
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:
Et si je n'ai pas de nouveau courrier:
C'est ça. Copiez et collez simplement le script à la fin de votre fichier ~/.bashrc
.