Utiliser «ping», «couper» et «tee» set

Donc, je comprends qu'en utilisant 'tee' je peux redirect la sortie d'une command telle que 'ping' vers stdout ainsi qu'un file.

Par exemple:

> ping google.com | tee somefile 

Cela afficherait les statistics de ping sur le terminal et les écrirait dans 'somefile'.

Maintenant, si je souhaite modifier la sortie de 'ping', je peux utiliser 'couper' de cette façon:

 > ping google.com | cut -d' ' -f 1 

Mais, si je souhaite utiliser les trois commands set, je reçois une sortie non sur stdout et un file vide.

 > ping google.com | cut -d' ' -f 1 | tee somefile 

Qu'est-ce que je fais mal? Y a-t-il une meilleure manière de faire cela? D'une certaine manière, je sens que je n'utilise pas correctement le tee. Tout aperçu serait apprécié.

J'utilise shell bash, si cela est pertinent.

Les commands de votre pipe, en tant que destination non-terminal, mettent en memory tampon votre sortie. Il apparaîtra éventuellement, mais seulement lorsque beaucoup de sortie s'accumule ou que la command ping se ferme.

Vous pouvez utiliser ping -c 5 google.com pour définir un nombre spécifique de packages à envoyer, puis ping quittera. Votre sortie revient et les tuyaux doivent fonctionner comme prévu.

Edit: une autre solution de contournement utilise stdbuf pour éviter la mise en memory tampon des pipelines et awk pour éviter une mise cut tampon interne et permettre au ping de s'exécuter en continu:

 ping www.google.com | stdbuf --output=0 awk '{print $1}' | tee /tmp/file