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.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 16 de abril de 2012
Esta dica permite que você use um processo em quase todos os lugares em que usaria um arquivo. Para ilustrar o conceito, vamos usar o comando diff. A maior parte das versões do diff permite que se passe exatamente o nome de dois arquivos como diretivas. Mas e se quisermos comparar algo como, por exemplo, o conteúdo de dois diretórios que não necessariamente existem em um arquivo? Aqui é onde usamos substituição por processos. Por exemplo, para obter as diferenças no conteúdo de dois diretórios, podemos usar o seguinte comando:
diff <(find dir1) <(find dir2)
A sintaxe <(comando)
cria um named pipe, e conecta a saída do comando (STDOUT) ao pipe.
Então, tudo o que for lido do pipe estará na verdade lendo a saída de um comando.
Para provar a você mesmo este conceito, tente o seguinte:
$ echo <(/bin/true) /dev/fd/63 $ ls -l <(/bin/true) lr-x------ 1 jgm eng 64 Jul 13 21:50 /dev/fd/63 -> pipe:[31340331] $ file <(/bin/true) /dev/fd/63: broken symbolic link to pipe:[31340360]
Da mesma forma, você pode usar a sintaxe >(comando)
para fazer com que um comando
leia do pipe. Veja um exemplo:
tar cvf >(gzip -c > dir.tar.gz) dir
É claro que existem formas melhores de se fazer isto, mas o que estamos tentando demonstrar aqui é a substituição por processo (process substitution).
Este texto foi traduzido e adaptado a partir do original em inglês "Two Cool Bash Tricks", de autoria de Greg Miller.
Observação: eu optei por usar, nesta tradução, o original named pipe ao invés das suas muitas traduções, como por exemplo canalização nomeada, conectores nomeados, tubos batizados e outras tantas variações. Como o termo está consagrado no meio técnico, achei que a dica ficaria mais clara desta forma. Da mesma forma, eu arrisquei traduzir o termo process substitution por substituição por processo. Espero ter acertado :-)
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários