![仅输出到文件的程序的管道输出](https://linux22.com/image/99204/%E4%BB%85%E8%BE%93%E5%87%BA%E5%88%B0%E6%96%87%E4%BB%B6%E7%9A%84%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%AE%A1%E9%81%93%E8%BE%93%E5%87%BA.png)
pico2wave
仅支持输出到文件(编辑:带有扩展名.wav
)。如何aplay
在不清理任何命名管道、临时文件或包装脚本的情况下将输出强制到管道中?
即,pico2wave -w tmp.wav "test" && aplay tmp.wav && rm tmp.wav
创建一个临时文件,因此不是我正在寻找的解决方案。
答案1
关于一般解决方案的注释:对于许多需要文件名的程序,您可以给出路径/dev/stdout
(指向 的链接/proc/self/fd/1
,假设所述文件存在),它们会很乐意将其输出发送到stdout
。还可以使用bash
with中的进程替换cat
,即foo -f >(cat) args | bar
(谢谢,g男)。
因为pico2wave
检查文件扩展名,一个可能的解决方案是符号链接/dev/stdout
到具有适当扩展名的路径,最好是诸如/var/local/
.这确实会创建一个额外的文件,但不是每个进程:
ln -s /dev/stdout /var/local/pico2wave.wav
,然后pico2wave -w /var/local/pico2wave.wav "test" | aplay
就可以了。