Używam skryptu powłoki, który przesyła dane z jednego procesu do drugiego
process_a | process_b
Czy ktoś zna sposób, aby dowiedzieć się, ile bajtów zostało przekazanych między tymi dwoma programami? Jedynym rozwiązaniem, jakie mogę teraz wymyślić, byłoby napisanie małego programu c, który odczytuje ze standardowego wejścia, zapisuje na standardowe wyjście i zlicza wszystkie przesłane dane, przechowując liczbę w zmiennej środowiskowej, takiej jak:
process_a | count_bytes | process_b
Czy ktoś ma lepsze rozwiązanie?
exec
i bezpośrednio wyprowadzić do pliku?input-command | dd 2>~/fred | output-command
Użyj pv przeglądarki rur. To świetne narzędzie. Gdy się o tym dowiesz, nigdy nie dowiesz się, jak bez niego żyłeś.
Może także pokazywać pasek postępu i „szybkość” przesyłania.
źródło
cat file | pv -b
zwróci rozmiar pliku.process_a | tee >(process_b) | wc --bytes
powinno działać. Następnie możesz przekierowaćwc
licznik tam, gdzie jest to potrzebne. Jeśliprocess_b
wypisujesz coś dostdout
/stderr
prawdopodobnie prawdopodobnie będziesz musiał to gdzieś przekierować/dev/null
.Dla nieco wymyślonego przykładu:
Dla wyjaśnienia:
tee
pozwala>()
przekierować dane wyjściowe do wielu plików (plus standardowe wyjście), a konstrukcja jest „podstawieniem procesu” bash, co sprawia, że proces wygląda jak plik tylko do zapisu, dzięki czemu można przekierowywać zarówno do procesów, jak i plików ( zobacz tutaj lub to pytanie + odpowiedź, aby zobaczyć przykład użyciatee
wysyłania danych wyjściowych do wielu procesów).źródło
Wiem, że jestem spóźniony na imprezę, ale wierzę, że mam dobrą odpowiedź, która może poprawić ten przydatny wątek.
Jest to połączenie odpowiedzi @Phil P i @Didid Spillett, ale:
Liczba bajtów jest wypisywana na standardowe wyjście, wraz z dowolnym wyjściem procesu_b.
Przedrostka można użyć do identyfikacji wiersza zawierającego bajty podczas pracy z danymi wyjściowymi (
Bytes:
w przykładzie).OSTRZEŻENIE:
Nie należy polegać na kolejności wierszy na wyjściu
. Kolejność jest nieprzewidywalna i zawsze może się różnić, nawet podczas wywoływania tego samego skryptu z tymi samymi parametrami!
źródło