Bash Script que pode direcionar o fluxo de stdin para o programa

1

Estou tentando criar um script capaz de processar infinitamente um fluxo de entrada que é canalizado para ele, e produzir continuamente um fluxo de saída que pode ser canalizado para algo diferente da seguinte maneira:

<infinitely produce data stream> | myscript | <use modified stream>

No meu caso, eu tenho um programa que gerará continuamente uma sinusóide wav sem cabeçalho que será canalizada para o meu script que irá misturá-lo com outros sinusóides, e passá-lo para um programa que irá tocá-lo conforme flui.

Eu tentei usar

#!/bin/bash

while read data; do
    #echo "data = $data"
    ./merge <($data) <(./sine 1000)
done

Mas isso só deixa símbolos malucos em todo o meu terminal. Parece que, para cada linha de stdin que recebe, ele chama mesclagem de novo e de novo.

Meu programa de mesclagem é escrito em C e é escrito de forma a abrir um arquivo passado como argumento.

Funciona bem quando eu corro no terminal como

./merge <(./sine 1000) <(./sine 2000) | ./audio_sink

Isso tem duas instâncias de sine running, gerando ondas senoidais de 1kHz e 2kHz respectivamente, e merge lê os dois fluxos de entrada, mistura-os e produz uma saída para sdtout que pode ser canalizada para audio_sink e eu posso ouvir que está funcionando .

Neste script que estou escrevendo, preciso canalizar o direcionamento de entrada para o primeiro argumento, conforme acima.

Como você pode escrever um script bash que permite usar dados continuamente canalizados, manipulá-los e fazer com que os dados sejam enviados de volta?

    
por o0rebelious0o 06.02.2014 / 00:41

1 resposta

2

talvez ./merge <(cat) <(./sine 1000)

    
por 06.02.2014 / 00:51