+--------------------+ +------+ +----------+
| stdout |·······→| less |——————→| |
| somecommand | +------+ | terminal |
| stderr |——————————————————————→| |
+--------------------+ +----------+
Se somecommand
imprimir texto apenas no erro padrão, quando você executar somecommand | less
, somecommand
e less
serão exibidos no terminal. A saída do comando em seu stderr não vai para less
, ele vai para o terminal diretamente, já que ele não é redirecionado. Primeiro, a saída de somecommand
rola por enquanto menos inicializa e mostra sua linha de prompt; então quando somecommand
terminar menos avisos de que sua entrada está completa (porque o canal está fechado).
Você pode querer experimentar um pouco: executar
{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }
e variações nos tempos de sono para ter somecommand
produzir saída antes ou depois de menos estarem prontos e ver o que acontece quando o tubo é fechado.