'docker logs foo | menos 'não é pesquisável ou rolável, mas' docker logs foo 2 & 1 | menos 'é

7

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

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

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

Isso pode ser uma coisa vim de várias janelas que eu não entendo. Pensamentos?

    
por MagicWindow 29.03.2016 / 23:01

1 resposta

4

+--------------------+        +------+       +----------+
|             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.

    
por 30.03.2016 / 02:58