Le badge de l'icône du dock du terminal indique le nombre de cloches (Control-G, ASCII BEL) écrites sur les terminaux en arrière-plan. Il indique le nombre de cloches "non lues" :
Si la barre d'onglets est visible, vous verrez une icône de "cloche" correspondante dans l'onglet de chaque terminal avec des cloches "non lues" :
Lorsque vous activez l'un de ces terminaux, l'indicateur de cloche est supprimé de l'onglet et le nombre total affiché dans le badge de l'icône du dock diminue. Le badge est retiré lorsque le compte atteint zéro. (La barre d'onglets n'a pas besoin d'être visible pour ce comportement. Elle n'est nécessaire que si vous voulez voir l'indicateur de cloche pour savoir quels terminaux ont des cloches "non lues").
Il existe également un indicateur de "texte non lu" affiché dans les onglets, sous forme de points de suspension (" ") :
Ce message s'affiche lorsque tout ce qui est est écrit dans un terminal en arrière-plan et, comme l'indicateur de cloche, effacé lorsque vous activez cette fenêtre/cet onglet du terminal. Une ellipse de "texte non lu" est également affichée sur les fenêtres de terminal minimisées dans le Dock :
L'un ou l'autre peut suffire dans votre cas, en fonction de vos besoins spécifiques.
Comme vous l'avez deviné, le badge (et les indicateurs de l'onglet) sont destinés à vous donner un moyen de surveiller ce qui se passe dans les terminaux en arrière-plan sans avoir à les activer pour regarder le contenu du terminal, et les cloches ont une priorité visuelle élevée dans l'interface utilisateur afin que les utilisateurs puissent utiliser les indicateurs de cloche pour remarquer les événements importants.
Vous pouvez utiliser l'indicateur de cloche en vous arrangeant pour écrire des caractères ASCII BEL (Control-G) sur le terminal lorsque quelque chose qui vous intéresse se produit. Vous pouvez utiliser tee
pour diriger le tail
à la fois dans le terminal et dans un autre programme ou une commande shell afin que vous puissiez également voir le contenu. Vous pouvez également utiliser la commande screen
ou expect
qui peuvent rechercher un contenu spécifique pour déclencher une action.
Cet exemple simple émet un bip à chaque fois qu'une nouvelle ligne est écrite dans le fichier system.log :
tail -F /var/log/system.log | tee >(while read; do printf '\a'; done)
Bien sûr, cela peut faire beaucoup de bruit, y compris pour les lignes initialement affichées par tail
(par défaut, dix). Cette version saute les lignes initiales et évite également d'émettre un signal sonore plus d'une fois toutes les trois secondes :
# Notify the user when there's activity on stdin.
function activity_notification
{
# Skip the first ten lines (the default for tail)
for ((skip = 0; skip < 10; ++skip)) do read; done;
# Beep when there are new lines.
while read; do
printf '\a';
# Throttle: Ignore activity for the next three seconds. If the
# data contains a BEL (Control-G), stop waiting.
read -d $'\a' -t 3;
done
}
tail -F /var/log/system.log | tee >(activity_notification)
Après avoir lu une ligne et émis un BEL, il dit à read
pour lire toutes les entrées jusqu'à ce que le caractère spécifié soit lu ou que trois secondes se soient écoulées. Vous pouvez définir le délimiteur comme étant NUL ASCII ( read -d ''
avec une chaîne vide lui fera utiliser NUL), ce qui est peu probable (impossible ?) d'apparaître dans le fichier journal du système, mais j'ai choisi d'utiliser BEL comme délimiteur de sorte que si le fichier contient des BELs, ils produiront également un bip.