Czy istnieje różnica między unbuffer (1) a stdbuf (1)? Z tego, co zbieram, unbuffer robi coś więcej niż „najlepszy wysiłek” wywołania na początku zestawu funkcji libc (X) buf, a następnie pozostawienia rzeczy?
13
Działają na zupełnie inne sposoby.
Program rozpakowujący program oczekuje na uruchomienie nazwanego polecenia. Ponieważ oczekiwanie tworzy pseudo-tty do dołączenia do standardowego procesu potomnego, dziecko może zostać oszukane, myśląc, że powinno używać buforowania linii zamiast buforowania bloków. Niektóre programy zmienią swoje zachowanie, gdy isatty (standardowe wyjście) jest prawdziwe, inne tego nie zrobią i bardzo trudno jest ustalić, która będzie, a która nie.
Program stdbuf próbuje umieścić libstdbuf przed libc dla dynamicznie ładowanych plików binarnych. Gdzie libstdbuf przedefiniowuje domyślną strategię buforowania wywołań libc stdio.
Dowiedziałem się tego przez
apt-get source expect coreutils
i czytanie odpowiedniego źródła dla każdego programu.
unbuffer -p
mogą wydawać się działać niepoprawnie, jeśli proces wprowadzający dane wejściowe do bufora niebuforowego zakończy działanie. Zastanów się:process1 | unbuffer -p process2 | process3
jeśli proces 1 zakończy się, proces 2 może jeszcze nie zostać zakończony. Nie jest możliwe, aby