Usar tee para Dividir a Saída e Redirecionar a Entrada Padrão com <
Nesta etapa final, você explorará dois conceitos de redirecionamento complementares: dividir a saída com o comando tee e fornecer entrada para um comando a partir de um arquivo usando o operador <.
Dividindo a Saída com tee
Às vezes, você deseja salvar a saída de um comando em um arquivo e, ao mesmo tempo, visualizá-la no terminal. Os operadores > e >> redirecionam a saída exclusivamente para um arquivo, ocultando-a da tela. O comando tee resolve isso dividindo a saída, enviando-a tanto para um arquivo quanto para a saída padrão (sua tela). Seu nome vem do conector em "T" usado em encanamentos, que divide um fluxo em dois caminhos.
Vamos vê-lo em ação. Listaremos o conteúdo do diretório /etc/ e usaremos o tee para exibir a lista na tela e salvá-la em um arquivo chamado etc_listing.txt.
ls /etc/ | tee etc_listing.txt
Você verá a listagem completa do diretório impressa no seu terminal. Ao mesmo tempo, o comando tee gravou exatamente a mesma saída em etc_listing.txt. Você pode verificar isso:
cat etc_listing.txt
O conteúdo do arquivo corresponderá ao que você viu na tela.
Por padrão, o tee sobrescreve o arquivo de destino. Para anexar a um arquivo, use a opção -a. Isso é muito útil para logs. Vamos criar um arquivo de log e anexar duas entradas.
date | tee system_log.txt
echo "User labex performed a system check." | tee -a system_log.txt
O primeiro comando cria o system_log.txt com a data atual. O segundo comando, usando tee -a, anexa uma nova linha sem excluir a data. Vamos verificar o arquivo final:
cat system_log.txt
A saída mostrará ambas as linhas:
Wed Jun 25 14:56:53 CST 2025
User labex performed a system check.
Redirecionando a Entrada Padrão com <
Agora vamos olhar para o oposto do redirecionamento de saída: o redirecionamento de entrada padrão (stdin). Muitos comandos, como sort, wc ou cat, podem ler dados do stdin (geralmente o seu teclado). O operador < permite que você instrua um comando a obter sua entrada de um arquivo.
Primeiro, vamos criar um arquivo simples com uma lista de itens. Vamos chamá-lo de items.txt.
echo "banana" > items.txt
echo "apple" >> items.txt
echo "cherry" >> items.txt
Agora temos um arquivo items.txt com três itens não ordenados. O comando sort pode ordenar linhas de texto. Vamos usar o < para alimentar o comando sort com o conteúdo de items.txt.
sort < items.txt
O comando lerá o conteúdo de items.txt como sua entrada, irá ordená-lo e imprimirá o resultado em sua saída padrão (o terminal):
apple
banana
cherry
Isso é funcionalmente semelhante a executar sort items.txt, mas demonstra o poderoso conceito de redirecionar um arquivo para a entrada padrão de um comando. Isso se torna essencial ao trabalhar com comandos que apenas conseguem ler do stdin e não aceitam um nome de arquivo como argumento.
Como exemplo final, considere cat < items.txt. Isso diz ao cat para ler sua entrada de items.txt e, como o trabalho do cat é imprimir sua entrada na sua saída, ele exibe o conteúdo do arquivo na tela.
cat < items.txt
Isso conclui nossa exploração sobre o redirecionamento básico de E/S no Linux. Agora você possui as ferramentas para controlar de onde seus comandos recebem entrada e para onde suas saídas são enviadas.