Ciò accade quando un programma convogliato (es grep) chiude il condotto di lettura prima che il programma precedente è terminata scrivendo l'intera pagina.
In , non appena grep ha ciò che desidera, chiuderà il flusso di lettura dall'arricciatura. cURL non si aspetta questo ed emette l'errore "Failed writing body".
Una soluzione alternativa consiste nel convogliare il flusso attraverso un programma intermedio che legge sempre l'intera pagina prima di inviarlo al programma successivo.
E.g.
curl "url" | tac | tac | grep -qs foo
tac
è un semplice programma Unix che legge l'intera pagina di ingresso ed inverte l'ordine linea (da qui si corre due volte). Poiché deve leggere l'intero input per trovare l'ultima riga, non restituirà nulla a grep fino a quando cURL non sarà terminato. Grep chiuderà comunque il flusso letto quando ha quello che sta cercando, ma influenzerà solo tac, che non emetterà un errore.
Per me funziona, non c'è bisogno di buffer. – hek2mgl
funziona anche in pipeline ?: 'curl 'http://www.multitran.ru/c/m.exe?CL=1&s=hello&l1=1' | tr -d '\ n'' – static
Sì, certo .. Provato con il tuo url – hek2mgl