Até mesmo para o Bash aficionado, o comando mkfifo
é provavelmente um dos menos usados em sua coleção. Ele cria um sinal para compartilhamento de dados, conectando dois serviços em execução com um tipo de wormhole de linha de comando. Os dados enviadas no final de uma aparecerá instantaneamente na outra.
Antes de olharmos como usá-lo, é válido lembrar como nós tipicamente vemos canalização (ou pipes). Se você está acostumado a usar o shell para qualquer coisa diferente de assustar seus amigos com cat /dev/random
, você estará acostumado com a idéia de canalização. Na maioria das vezes é usado para redirecionar a saída de um programa para a entrada de outro. Um uso comum é quando texto demais na saída de um comando para ler. Canalizando a saída em outro - normalmente também menor ou maior - permite que você interrompa e pagine através da saída em seu próprio tempo:
cat /var/log/messages | less
Nesta intância, a canalização é temporariamente criada para a execução de um único comando, mas usando mkinfo é possível criar canalizações persistentes que você pode usar em tarefas similares.
A parte 'fifo' do comando referencia à natureza da canalização - os dados que é o primeiro a entrar é o primeiro a sair. Criar a própria canalização é uma tão simples quando digitar mkfifo, seguido do nome pelo qual você quer chamá-lo. É igualmente possível definir as permissões para a canalização (usando o parâmetro --mode
) para restringir o acesso. Uma vez criada a canalização você precisa apenas direcionar os dados por ela. Aqui está um pequeno exemplo. Primeiro criamos a canalização e usamos tail -f
para processar a saída de qualquer dado que é enviado para ela:
mkfifo fifo_pipe tail -f fifo_pipe
O próximo passo, normalmente por outro terminal ou conta de usuário (caso a permissão tenha sido definida), é enviar dados para a canalização. Digitando echo "Um teste" >> fifo_pipe
irá enviar a mensagem de teste, que terá a saída processada pelo comando tail
que anexamos à canalização.
Uma resposta em “Faça suas próprias Bash wormholes”
[…] Faça suas próprias Bash wormholes « Tropeçando 17 Faça suas próprias Bash wormholes » […]