Saída de tubulação do programa que somente é enviada para um arquivo

0

pico2wave suporta apenas a saída para um arquivo (edit: com extensão .wav ). Como posso coagir a saída em um pipe para aplay , sem limpar nenhum pipe nomeado ou arquivos temporários ou um script de wrapper?

Ou seja, pico2wave -w tmp.wav "test" && aplay tmp.wav && rm tmp.wav cria um arquivo temporário e, portanto, não é o que estou procurando como solução.

    
por Iiridayn 21.11.2016 / 23:11

1 resposta

3

Uma nota sobre a solução geral: para muitos programas que requerem um nome de arquivo você pode dar o caminho /dev/stdout (um link para /proc/self/fd/1 , assumindo que os arquivos existam) e eles irão enviar sua saída para stdout . Também é possível usar a substituição de processo em bash com cat , ou seja, foo -f >(cat) args | bar (obrigado, g-man ).

Como pico2wave verifica a extensão do arquivo, uma solução possível é fazer o symlink /dev/stdout de um caminho com a extensão apropriada, idealmente em algum lugar como /var/local/ . Isso cria um arquivo extra, mas não por processo: ln -s /dev/stdout /var/local/pico2wave.wav , então pico2wave -w /var/local/pico2wave.wav "test" | aplay funciona.

    
por 21.11.2016 / 23:11