我试图定义一个单行的别名,比如下面。
alias speak='curl -G --data-urlencode "text=$(cat /dev/stdin)" "https://speech.botiumbox.com/api/tts/en?&tts=marytts" -H "accept: audio/wav" | mpv -'
这样我就可以像这样使用它
echo Hello World! | speak
speak Hello World!
speak<RET> # continuously do TTS per line until ^D
Hello World!
Another line!
<Ctrl-D>
我正在使用的API工作,如果我使用
curl -G --data-urlencode "text=Hello World!" "https://speech.botiumbox.com/api/tts/en?&tts=marytts" -H "accept: audio/wav" | mpv -
如上图所示,只要将标准输入由 cat /dev/stdin
似乎没有创建一个交互式的CLI程序。有什么办法可以把这个API封装成一个交互式的CLI程序?理想情况下,要符合POSIX标准,这样它就可以运行在 bash
shell在Unixen中的应用。
我发现了一个使用bash函数代替别名的变通方法。函数 marySpeak
取一个字符串,将其发送到网上的TTS,然后用 mpv
. 所有的东西都被定义为一条线,所以可以放在你的。.bashrc
:
marySpeak() { curl -s -G --data-urlencode "text=$1" "https://speech.botiumbox.com/api/tts/en?&tts=marytts" -H "accept: audio/wav" | mpv - 2>&1 > /dev/null; }
# then simply use it like this
marySpeak "hello world!"
在GNULinux和macOS中测试。