Ce que vous voyez est l'effet d'un tampon stdout standard dans grep fourni par Glibc. La meilleure solution est de le désactiver en utilisant --line-buffered (GNU grep, je ne sais pas quelles autres implémentations pourraient le prendre en charge ou quelque chose de similaire).
Quant à pourquoi cela n'arrive que dans certains cas :
ssh server "tail -f /var/log/server.log | grep test"
exécute toute la commande entre guillemets sur le serveur - donc grep attend de remplir son tampon.
ssh server tail -f /var/log/server.log | grep test
exécute grep sur votre machine locale sur la sortie tail envoyé via le canal ssh.
L'élément clé ici est que grep ajuste son comportement selon que son stdin est un terminal ou non. Lorsque vous exécutez ssh -t , la commande à distance s'exécute avec un terminal de contrôle et donc la télécommande grep se comporte comme votre local.
regarde ça :multitail
MultiTail vous permet de surveiller les fichiers journaux et la sortie des commandes dans plusieurs fenêtres d'un terminal, colorier, filtrer et fusionner.
Pour suivre les journaux sur plusieurs serveurs, utilisez :
multitail -l 'ssh example@unixlinux.online "tail -f /path/to/log/file"' -l 'ssh example@unixlinux.online "tail -f /path/to/log/file"'