So, I assumed that in this case,
lesstakesstdinfile 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?