因此,我在 ~.bashrc 中使用命令创建了一个命令alias tunes='...'
。因此,我希望此命令打开一个音乐视频,然后在该视频结束后打开下一个视频。我使用的命令是:
alias tunes='cd /path/; xdg-open musicvideo.wav; xdg-open musicvideo2.wav;...; cd'
等等。它所做的只是打开最后一个音乐视频,然后它就结束了。我尝试过更换它;
,&&
但结果还是一样。有什么帮助吗?提前谢谢您。
答案1
如果xdg-open
立即打开并且不等待,请考虑使用您使用的音乐播放器的实际名称(Ubuntu 的默认名称是totem
),而不是xdg-open
或者,也可以这样做:
xdg-open file.wav ; while pgrep -f "file.wav" >/dev/null ; do : ; sleep 1 ; done
这可能在脚本中比在别名中更好,这样你就会有多个行。基本上,我们在这里放置了一个 while 循环,阻止我们进入下一个语句,并且我们反复检查命令file.wav
行中是否有进程。一旦没有这样的进程,你就可以继续下一行xdg-open
答案2
看起来你已经找到了答案具体的代码,但我想知道你为什么不使用某种播放列表来做到这一点?如果你试图让这个别名适用于最广泛的环境,你可能会遇到一些无法解释播放列表文件的程序(例如 mplayer 需要该选项-playlist
),但在大多数情况下它应该可以工作。
M3U 格式,受到广泛支持,是一个简单的文本文件,每行一个文件,带有完整路径或仅包含文件名(假设文件位于当前目录中)。这意味着您可以使用一个简单的命令创建一个,例如...
ls *.wav > playlist.m3u
…然后运行…
[cd to the relevant directory]
xdg-open playlist.m3u
…在您的别名中。但是,如果您在已知环境中执行此操作,则启动您知道支持该格式的特定程序可能更可靠。
答案3
问题是你正在使用xdg-open
。进程在调用实际应用程序(vlc、mplayer 等)后不久就终止了,因此运行了下一个命令。
你可以通过运行这个脚本来检查这种情况是如何发生的:
#!/bin/bash
xdg-open /path/to/video &
echo "xdg-open PID is $!."
while [ -e /proc/$! ]; do
echo "$! is alive."
sleep 1;
done
echo "$! is not alive anymore."
您可以直接启动媒体播放器,例如:
vlc /path/to/first/video && vlc /path/to/second/video