So, I assumed that in this case,
less
takesstdin
file which is written fromls -l /root
's stdout.
Isso está correto e não contradiz o que você observou com tr
.
A construção pipeline do shell ( PRODUCER | CONSUMER
) cria um can pipe anônimo antes de iniciar os dois processos PRODUCER
e CONSUMER
. Um canal anônimo é um tipo de arquivo que não tem nome, não possui uma entrada de diretório, mas pode ser lido e gravado normalmente. Em um pipeline, o shell conecta a extremidade de gravação do pipe ao stdout do produtor e a extremidade de leitura do pipe ao stdin do consumidor.
O comando tr
só lê dados de stdin e grava em stdout. O comando less
faz isso somente se você não passar um nome de arquivo na linha de comando; se você passar um nome de arquivo para less
, ele lerá desse arquivo em vez de ler de stdin. O que o less
faz é uma convenção comum, seguida por muitos aplicativos semelhantes que lêem dados de um arquivo.
Você também pode ter interesse em que se entende conectando STDOUT e STDIN? e Como um comando pode ter mais de uma saída?