如何将这两个不同的命令组合到一个脚本中:
$ wget http://mymusic.store.com/musicfoo.mp3
#file gets saved as musicfoo.mp3
$ mplayer musicfoo.mp3
wget 尝试使用文件的默认名称/扩展名(如在互联网上)将文件保存到磁盘...在我的例子中是 mp3 文件...mplayer 使用此文件作为参数来播放它。
知道如何将其合并到一个脚本中吗?
答案1
直接播放文件
您甚至不必在播放这些文件之前下载它们mplayer
。从mplayer
手册页:
摘抄
mplayer [options] [file|URL|playlist|-]
所以mplayer可以直接播放网址。
例子
$ mplayer http://mymusic.store.com/musicfoo.mp3
表现
您可能需要调整缓存值才能mplayer
顺利播放内容。有一些开关mplayer
可以实现这一点。
摘自 mplayer 手册页
-cache <kBytes>
This option specifies how much memory (in kBytes) to use
when precaching a file or URL. Especially useful on slow media.
-cache-min <percentage>
Playback will start when the cache has been filled up to
<percentage> of the total.
因此,也许像这样,您将使用这些值来根据您的情况获得流畅的播放。
$ mplayer -cache 8000 -cache-min 30 http://mymusic.store.com/musicfoo.mp3
下载并播放
其他一些答案中讨论的另一种方法是使用wget
下载然后播放文件。这种方法的固有问题是在文件下载完成后获取要播放的文件名。
卷曲通过管道传输到 mplayer
这种方法实际上有两种技术。第一种是使用wget
或curl
开始下载,然后将数据通过管道传输到mplayer
.
例子
$ wget http://mymusic.store.com/musicfoo.mp3 -O - | mplayer -
您还可以像以前一样在这里缓存下载:
$ wget http://mymusic.store.com/musicfoo.mp3 -O - | mplayer -cache 8192 -
首先是curl,然后是mplayer
另一种方法是下载文件然后播放。您可以使用 Bash 函数来包装它,因为它现在变成了一个两步过程,首先完全下载文件,然后再播放。
例子
$ function smplayer() { wget $@ && mplayer $(basename $@); }
然后要进行下载和播放,您需要像这样运行该函数:
$ smplayer http://mymusic.store.com/musicfoo.mp3
答案2
尝试:
wget http://mymusic.store.com/musicfoo.mp3 && mplayer musicfoo.mp3
意思&&
是“一旦左侧命令有成功地完成”。这假设左侧命令没有分叉或使用非标准退出状态价值观。我怀疑 wget 是否会执行后者,并且只要您不使用该-b
开关,它也不应该执行前者。
答案3
尝试这个 :
mkdir /tmp/download_$$
cd /tmp/download_$$
wget http://mymusic.store.com/musicfoo.mp3
mplayer *
答案4
我有一个解决方案:
fpath=$(basename "$1")
wget $1
mplayer $fpath
上述问题是,.1
如果文件名已经存在,wget 将为下载的文件分配一个文件名(在其末尾附加 a)。因此可以说 fpath 的值不是正确的文件。