为什么这个 bash 脚本会启动 vlc 两次



这是我使用动态播放列表启动vlc的脚本

#!/bin/bash
find "/path/to/music" -type f -path "*$1*" -print0 | xargs -0 vlc

当不带参数运行时,vlc 将启动并播放目录树中的文件。

然后我关闭 vlc,另一个实例启动。

如果我将每个实例中的播放列表与

find "/path/to/music" -type f -path "**"

事实证明,第一个实例获得了大部分播放列表,第二个实例获得了其余部分。拆分是确定性的。以下是上述命令输出的摘录:

...
/path/to/music/Liz Carroll/Lost in the Loop/08 - The Crow in the Sun.ogg
/path/to/music/Liz Carroll/Lost in the Loop/02 - The Champaign Jig Goes To Columbia, Pat and Al's.ogg
/path/to/music/Liz Carroll/Lost in the Loop/04 - The Golden Legs, The Flogging Reel.ogg
/path/to/music/Liz Carroll/Lost in the Loop/09 - The Ugly Duckling.ogg
/path/to/music/Liz Carroll/Lost in the Loop/03 - See It There, Con Cassidy's.ogg
/path/to/music/Liz Carroll/Lost in the Loop/13 - The Didda, Fly and Dodger.ogg
/path/to/music/Eliza Carthy/Dreams of Breathing Underwater/08 Little Bigman.mp3
/path/to/music/Eliza Carthy/Dreams of Breathing Underwater/07 Lavenders.mp3
...

拆分始终发生,以便最后三个文件是第二个实例播放列表中的第一个文件。那里似乎没有任何技巧角色。撇号的文件名按原样显示在 VLC 播放列表中,似乎没有任何遗漏,VLC 输出没有错误。

为什么 vlc 的第一个实例没有获取 find 输出中的所有文件?

为什么会有第二个实例得到其余的?

可以作为命令行参数传递的最大字符数。这就是xargs的用途:将输入拆分为多个块,如果它们的组合大小太大,则将它们传递给单独的程序调用。

正如man xargs所说:

命令的命令行将一直构建到达到系统定义的限制(除非使用 -n-L 选项)。 指定的 命令将根据需要多次调用以用完列表 的输入项。 通常,对 命令比输入中有项目。

在您的例子中,在两次vlc调用中处理了数千个输入项。

相关内容

  • 没有找到相关文章

最新更新