canaliza ls para grep (linhas vs. “itens”)

2

Considere o seguinte comando:

ls
dir1 dir2 file1
x1   x2   y2

quando esta saída é canalizada para, e. grep cada arquivo / diretório é processado como um 'item'.

ls | grep f
file1

Então, obviamente, há uma distinção entre a saída real que um ls produz e a entrada que é processada pelo grep.

Como o grep opera em linhas, pode-se esperar que ls | grep f mostre toda a primeira linha, a saber: dir1 dir2 file1

O que estou perdendo aqui? Qual é o mecanismo por trás desse comportamento?

    
por Anton Harald 11.07.2016 / 14:26

2 respostas

4

É possível que um comando detecte quando sua saída está indo para um TTY ou não. Assim, neste caso em particular, quando ls detecta que sua saída não está indo para um TTY, ela se comporta como se -1 fosse passado como argumento.

Você pode ver isso, e que grep não está fazendo nada de especial usando cat :

ls | cat
    
por 11.07.2016 / 14:29
2

Para ver como o ls se comporta quando sua saída está sendo redirecionada, você pode tentar executar

ls | cat

ou

ls -1

que é como ls se comporta quando sua saída não vai para um TTY.

    
por 11.07.2016 / 14:29

Tags