você está aqui: Home  → Arquivo de Mensagens

Substituição de Processos

Colaboração: Júlio Cezar Neves

Data de Publicação: 11 de outubro de 2017

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.

Sobre o autor

Júlio Cézar Neves

O 4º UNIX do mundo nasceu na Cidade Maravilhosa, mais precisamente na Cobra Computadores, onde à época trabalhava o Julio. Foi paixão à 1ª vista! Desde então, (1980) atua nessa área como especialista em Sistemas Operacionais e linguagens de programação. E foi por essa afinidade que quando surgiu o Linux foi um dos primeiros a estudá-lo com profundidade e adotá-lo como Sistema Operacional e filosofia de vida. É autor dos livros Programação Shell Linux, 11ª edição e Bombando o Shell.


Veja a relação completa dos artigos de Júlio Cezar Neves

 

 

Opinião dos Leitores

Julio
11 Out 2017, 21:49
Valeu Dorian,
Obrigadíssimo pelo elogio ao meu trabalho, mas acho que vc quis dizer que eu mostro o pulo do gato. É verdade, não escondo nada... Mas por baixo dos panos, na atualidade política brasileira, pode ter outra conotação...😂

É brincadeira, não perco a piada de jeito nenhum, principalmente se puder envolver a nata política do mundo, que todos sabemos, se concentra em nosso país.

Valeu Dorian, qq dúvida, sempre às ordens.

Abração
Dorian Bolivar
11 Out 2017, 20:09
Os artigos sobre programação shell do Júlio Cezar Neves são de uma maestria inigualável, especialmente por revelarem o que acontece "por baixo dos panos". Obrigado Júlio e Dicas-L por trazerem esse conteúdo essencial a todo profissional Unix/Linux!
*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