文件名列表作为 mplayer 的参数 => mplayer 无法识别文件名

文件名列表作为 mplayer 的参数 => mplayer 无法识别文件名

我想mplayer随机播放一些音乐文件。我不想为此切换播放器,我想了解这里出了什么问题。

ThePandaTooth $ ls
file_1.ogg
file_2.ogg
file_3.ogg

我知道,结果的输出ls | sort -R是文件名的随机输出。但我无法播放它们,因为奇怪的原因,它找不到文件。排序在这里无关紧要。

ThePandaTooth $ mplayer $(ls | sort -R)
Playing file_1.ogg.
Cannot open file 'file_1.ogg': No such file or directory
Failed to open file_1.ogg

Playing file_2.ogg.
Cannot open file 'file_2.ogg': No such file or directory
Failed to open file_2.ogg

编辑mplayer *:当然可以用作品来播放文件。

答案1

问题很可能是您在以下*rc文件之一中定义了别名:

alias ls='ls --color=always'

在这种情况下,颜色代码会在管道中保留下来,并mplayer获得由这些代码包围的文件名。您可以将命令替换的输出传递$()给以printf查看mplayer真正收到的内容,例如

printf '%q\n' $(ls | sort -R)

你会看到类似的东西

$'\E[01;35mFile_1.ogg\E[0m'
$'\E[01;35mFile_2.ogg\E[0m'
$'\E[01;35mFile_3.ogg\E[0m'

显然mplayer正确地报告“没有这样的文件或目录”,并打印完整的有问题的文件名,包括转义码,但 shell 再次将这些代码解释为颜色,因此您只能在输出中看到可能令人困惑的名称。

要正确传递文件名,只需运行\lscommand ls什至使用 启动新 shell bash -f,这样bash就不会使用别名,而是使用本机命令

$ printf '%q\n' $(\ls | sort -R)
File_1.ogg
File_2.ogg
File_3.ogg

答案2

我真的认为你不应该参与lssort根本不应该参与这里。如果您想以随机顺序播放文件,只需使用以下-shuffle选项:

mplayer -shuffle *

相关内容