ag saída aparece diferente no terminal vs quando canalizado para um arquivo

1

Quando executo o comando ag para pesquisar arquivos de texto, recebo uma saída semelhante a esta na linha de comando (resultados completos não mostrados):

❯ ag dependency
140317155505.md
27:The Bundler dependencies API ...

140423193022_python_packages.md
61:'distutils' is part of the Python standard ....

Existem novas linhas na saída. No entanto, quando eu canalizo ou redireciono para um arquivo, recebo uma saída assim:

140317155505.md:27:The Bundler dependencies API...
140423193022_python_packages.md:61:'distutils' is part of the Python standard...

Aqui há um dois pontos extras em vez de uma nova linha. Como é que isso funciona? Eu acho que ag apenas escreve para STDOUT e não tem conhecimento do alvo real de STDOUT - estou errado em pensar que ele não tem acesso a essa informação?

    
por Sean Mackesey 28.09.2014 / 21:47

2 respostas

1

O programa ag (não estou familiarizado com isso), poderia usar a chamada do sistema

stdout_is_tty = isatty(1);

The isatty() function tests whether fd is an open file descriptor referring to a terminal.

Isso permite modificar a saída dependendo de onde ela está gravando.

Eu também acho que encontrei a seção de código fonte relevante

/* If we're not outputting to a terminal. change output to:
* turn off colors
* print filenames on every line
*/
if (!isatty(fileno(stdout))) {
  opts.color = 0;
  group = 0;
....

Veja também man isatty .

    
por 28.09.2014 / 22:03
1

Eu cheguei aqui no Google e não encontrei a resposta que estava procurando: você pode invocar ag como

ag --color --group

para forçá-lo a usar as cores e os resultados de grupo padrão por arquivo, independentemente de a saída ser tty.

Aqui está o que parece em ação .

    
por 05.11.2015 / 08:26