como converter um script usando pipelines em pipes nomeados

2

Eu tenho um script bash que está usando pipes anônimos para alcançar:

  • captura de vídeo do dispositivo de captura dv
  • gravando em um arquivo (usando tee)
  • canalizando-o para ffmpeg2theora (convertendo para ogv / theora video)
  • gravando em um arquivo (usando tee)
  • canalizando-o para oggfwd para enviá-lo ao servidor de streaming icecast

Como eu consegui isso usando pipes nomeados (fifos), para que eu pudesse ter processos separados que eu pudesse controlar separadamente?

Eu estava usando este script:

 #!/bin/bash
 while (true); 
 do
    dvgrab --format dv1 - | \
    tee /filename_`date +%y%m%d_%H%M%S`.dv | \
    ffmpeg2theora.linux -f dv -x 382 -y 288 -v 3 --speedlevel 2 --no-skeleton -o /dev/stdout - | \
    tee /filename_`date +%y%m%d_%H%M%S`_stream_382x288.ogv | \
    oggfwd icecastserver.com 8000 password /mountpoint.ogv
done

Uma das razões pelas quais estou perguntando isso é que preciso ter arquivos dv e ogv limpos em disco, independentemente da rede estar ativa e do servidor de streaming icecast acessível.

Luka
fonte

Respostas:

1

Provavelmente, você pode fazer isso com arquivos comuns, se não precisar de nenhuma simultaneidade. O princípio para pipes nomeados é o mesmo

mudança

foo | \
bar | \
baz

Para

foo > foo.out
bar < foo.out > bar.out
baz < bar.out

Se o * .out tiver o nome de pipes, suspeito que os programas gravados neles possam ficar bloqueados, aguardando a drenagem dos buffers de saída.

RedGrittyBrick
fonte