Cela se produit lorsqu'un programme en pipe (par exemple grep) ferme le pipe de lecture avant que le programme précédent ait fini d'écrire la page entière.
Sur curl "url" | grep -qs foo
Dès que grep obtient ce qu'il veut, il ferme le flux de lecture de curl. cURL ne s'y attend pas et émet l'erreur "Failed writing body".
Une solution consiste à faire passer le flux par un programme intermédiaire qui lit toujours la page entière avant de la transmettre au programme suivant.
Par exemple
curl "url" | tac | tac | grep -qs foo
tac
est un simple programme Unix qui lit toute la page d'entrée et inverse l'ordre des lignes (nous l'exécutons donc deux fois). Comme il doit lire toute l'entrée pour trouver la dernière ligne, il n'enverra rien à grep tant que cURL n'aura pas terminé. Grep fermera toujours le flux de lecture lorsqu'il aura trouvé ce qu'il cherche, mais cela n'affectera que tac, qui n'émet pas d'erreur.