De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Bash - utilizando a saída de um comando como entrada de outro

Colaboração: Rodrigo Bernardo Pimentel

Data de Publicação: 07 de Agosto de 2000

Muitas vezes queremos utilizar a saída de um comando como entrada para outro, mas o primeiro espera um arquivo. Por exemplo, podemos querer fazer um diff da saída de dois comandos. Digamos que temos dois diretórios supostamente idênticos (talvez um seja o backup do outro), mas queremos checar. Há várias formas de se fazer isso, mas uma seria

# ls -l /home/rbp > /tmp/arq1
# ls -l /home/rbp-bak > /tmp/arq2
# diff /tmp/arq1 /tmp/arq2
(ou, para quem se lembra de uma dica anterior)
# diff /tmp/arq{1,2}
# rm /tmp/arq1 /tmp/arq2

Como todo bom usuário de Unix, a preguiça nos impele a usar um número mínimo de comandos (ou seja, menos digitação). Existe um modo de se criarem "arquivos virtuais" temporários no bash. A expressão

<(comando)

executa "comando" e fornece um "file descriptor" com sua saída. Em termos práticos, é como se um arquivo temporário fosse criado com a saída do comando e apagado depois de usado. Assim, o exemplo acima poderia ficar como:

# diff <(ls -l /home/rbp) <(ls -l /home/rbp-bak)


Veja a relação completa dos artigos de Rodrigo Bernardo Pimentel