我想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 再次将这些代码解释为颜色,因此您只能在输出中看到可能令人困惑的名称。
要正确传递文件名,只需运行\ls
或command ls
什至使用 启动新 shell bash -f
,这样bash
就不会使用别名,而是使用本机命令
$ printf '%q\n' $(\ls | sort -R)
File_1.ogg
File_2.ogg
File_3.ogg
答案2
我真的认为你不应该参与ls
或sort
根本不应该参与这里。如果您想以随机顺序播放文件,只需使用以下-shuffle
选项:
mplayer -shuffle *