Acesso direto ao conteúdo

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

 

Substituição de Processos

Colaboração: Júlio Neves

Hoje vou mostrar que o Shell também usa os named pipes de uma maneira bastante singular, que é a substituição de processos (process substitution). Uma substituição de processos ocorre quando você põe um < ou um > grudado na frente do parêntese da esquerda. Teclando-se o comando:

  $ cat <(ls -l)

Resultará no comando ls -l executado em um subshell como é normal, porém redirecionará a saída para um named pipe temporário, que o Shell cria, nomeia e depois remove. Então o cat terá um nome de arquivo válido para ler (que será este named pipe e cujo dispositivo lógico associado é /dev/fd/63), e teremos a mesma saída que a gerada pela listagem do ls -l, porém dando um ou mais passos que o usual.

Como poderemos constatar isso? Fácil... Veja o comando a seguir:

  $ ls -l >(cat)
  l-wx------ 1 jneves jneves 64 Aug 27 12:26 /dev/fd/63 -> pipe:[7050]

É... Realmente é um named pipe.

Você deve estar pensando que isto é uma maluquice de nerd, né? Então suponha que você tenha 2 diretórios: dir e dir.bkp e deseja saber se os dois estão iguais (aquela velha dúvida: será que meu backup está atualizado?). Basta comparar os dados dos arquivos dos diretórios com o comando cmp, fazendo:

  $ cmp <(cat dir/*) <(cat dir.bkp/*) || echo backup furado

ou, melhor ainda:

  $ cmp <(cat dir/*) <(cat dir.bkp/*) >/dev/null || echo backup furado

Este é um exemplo meramente didático, mas são tantos os comandos que produzem mais de uma linha de saída, que serve como guia para outros. Eu quero gerar uma listagem dos meus arquivos, numerando-os e ao final dar o total de arquivos do diretório corrente:

  while read arq
  do
      ((i++)) # assim nao eh necessario inicializar i
      echo "$i: $arq"
  done < <(ls)
  echo "No diretorio corrente (``pwd``) existem $i arquivos"

Tá legal, eu sei que existem outras formas de executar a mesma tarefa. Mas tente fazer usando while, sem usar substituição de processos que você verá que este método é muito melhor.

//Publicado originalmente na Dicas-L em 22 de fevereiro de 2005

Duvidas? <julio neves (a) gmail com>
Deseja fazer curso de Programação em Shell? <julio neves (a) tecnohall com br>

Conheça também o livro de Programação Shell de Júlio Neves

Veja a relação completa dos artigos da coluna Cantinho do Shell

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir
  • Currently 3.06/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (270 votos)


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Bombando o Shell - Caixa de Ferramentas Gráficas do Shell Linux></A>
</div>
<div align=center>
<!--
<a href='http://www.idph.net/inglesonline/inscricao.shtml' target='_blank'><img src='http://www.dicas-l.com.br/imagens/InglesOnline.jpg' border='0' alt=''></a><BR><BR>-->
<A HREF=http://iol.idph.com.br rel=

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis