+--------------------+ +------+ +----------+
| stdout |·······→| less |——————→| |
| somecommand | +------+ | terminal |
| stderr |——————————————————————→| |
+--------------------+ +----------+
Jeśli somecommand
drukuje tekst do standardowego błędu tylko, następnie po uruchomieniu somecommand | less
, somecommand
i less
są zarówno wyświetlanie do terminalu. Dane wyjściowe polecenia na jego stderr nie zmienią się less
, lecz trafią bezpośrednio do terminala, ponieważ nie są przekierowywane. Najpierw wyjście somecommand
zwojów przez while less inicjuje i pokazuje wiersz zachęty; wtedy, gdy somecommand
skończy mniej, zauważy, że wprowadzanie zostało zakończone (ponieważ potok jest zamknięty). Możesz trochę poeksperymentować: uruchom
{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }
oraz zmiany czasów snu, aby somecommand
uzyskać wynik przed lub po mniejszej gotowości, i zobaczyć, co się stanie, gdy rura zostanie zamknięta.
Gilles „SO- przestań być zły”
źródło