Caso specifico:Come fare in modo che un programma in una pipe non venga eseguito finché i primi dati non arrivano senza tempfile?
generate_data | curl -T - http://someserver/path
Ciò significa, Ho un programma che generano un output in stdout, e ho messo che su un server remoto con l'arricciatura.
Il problema è che se generate_data
richiede troppo tempo, il server sta per tornare 408.
So che i tubi eseguono tutti i comandi senza attendere i dati per essere pronti, quindi la mia prossima iterazione era:
generate_data | (sleep 20 ; curl -T - http://someserver/path)
Il tempo era il doppio del tempo massimo necessario per eseguire generate_data, quindi tutto è ok. Ma ... non è una soluzione ottimale.
So che posso creare qualcosa di più complesso con la lettura e uno script di shell corretto, ma ho la sensazione che mi manchi qualcosa di ovvio.
Quindi ... Che cosa posso utilizzare al posto dello sleep 20;
senza creare un file temporaneo?
quanti dati ci saranno? che ne dici di scrivere un file temporaneo, ad es. 'generate_data> tempfile; curl -T tempfile ... ' –
Sii grato che il' sonno' funzioni! ;-) Buona fortuna a tutti. – shellter