`docker registra foo | less` não é pesquisável ou rolável, mas `docker logs foo 2> & 1 | less` é

10

O uso de qualquer um deles fornece texto legível. Mas somente com o redirecionamento stderr é possível rolar ou digitar / somepattern e obter correspondências.

Sem ele, a pesquisa fornece "Nada a pesquisar (pressione RETURN)" e uma coluna de ~ 's.

Dado que stderr e stdout não são os mesmos, mas por que menos os mostra o mesmo até eu começar a fazer algo em menos?

Isso talvez seja algo estranho de vim com várias janelas que eu simplesmente não entendo. Pensamentos?

MagicWindow
fonte

Respostas:

7
+--------------------+        +------+       +----------+
|             stdout |·······→| less |——————→|          |
| somecommand        |        +------+       | terminal |
|             stderr |——————————————————————→|          |
+--------------------+                       +----------+

Se somecommandimprimir texto apenas em erro padrão, quando você executar somecommand | less, somecommande lessambos estiverem sendo exibidos no terminal. A saída do comando em seu stderr não vai less, está indo diretamente para o terminal, pois não é redirecionado. Primeiro, a saída dos somecommandpergaminhos é menos inicializada e mostra sua linha de prompt; quando somecommandterminar, menos notará que sua entrada está completa (porque o tubo está fechado). Você pode experimentar um pouco: execute

{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }

e variações nos tempos de suspensão para que a somecommandprodução saia antes ou depois de menos tempo e para ver o que acontece quando o tubo é fechado.

Gilles 'SO- parar de ser mau'
fonte