如何让一件事打开,然后另一件事打开

如何让一件事打开,然后另一件事打开

因此,我在 ~.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

相关内容