Załóżmy, że masz potok podobny do następującego:
$ a | b
Jeśli bprzestanie przetwarzać standardowe wejście, po pewnym czasie rura się azapełni i zacznie pisać, aż do brozpoczęcia standardowego , zostanie zablokowane (dopóki albo nie zacznie ponownie przetwarzać, albo umrze).
Gdybym chciał tego uniknąć, mogłem pokusić się o użycie większej rury (lub prościej buffer(1)) w taki sposób:
$ a | buffer | b
To po prostu dałoby mi więcej czasu, ale w akońcu przestałoby.
Chciałbym mieć (w bardzo konkretnym scenariuszu, do którego się odnoszę), aby mieć „nieszczelną” rurkę, która po zapełnieniu upuszczałaby niektóre dane (najlepiej wiersz po wierszu) z bufora, aby akontynuować przetwarzanie (jak zapewne można sobie wyobrazić, dane płynące w potoku są zbędne, tj. przetwarzanie danych bjest mniej ważne niż amożliwość uruchomienia bez blokowania).
Podsumowując, chciałbym mieć coś w rodzaju ograniczonego, nieszczelnego bufora:
$ a | leakybuffer | b
Prawdopodobnie mógłbym to zaimplementować dość łatwo w dowolnym języku, po prostu zastanawiałem się, czy brakuje mi czegoś „gotowego do użycia” (lub czegoś w rodzaju bash-line).
Uwaga: w przykładach używam zwykłych potoków, ale pytanie w równym stopniu dotyczy nazwanych potoków
Przyznając odpowiedź poniżej, zdecydowałem się również wdrożyć komendę leakybuffer, ponieważ poniższe proste rozwiązanie miało pewne ograniczenia: https://github.com/CAFxX/leakybuffer