Substitui??o de Processos

  • Post author:
  • Post category:Sem categoria

Colabora??o: J?lio Neves

Ontem aqui apareceu uma dica sobre named pipes, 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.

At? amanh?…

Duvidas? [email protected]
Deseja fazer curso de Programa??o em Shell? [email protected]