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 - Substituição por Processos

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 :-)

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida