使用 stdin 播放列表时的 Mplayer 控件

使用 stdin 播放列表时的 Mplayer 控件

我偶然看到这篇文章:从 stdin 读取时如何保留 mplayer 中的控制台输入?

但那里的答案对我不起作用。

我正在运行以下命令:

ls -l | grep -e mp3 -e wav | awk '{i=index($0,$9); $0=substr($0,i); printf "./"$0"\n"}' | grep " " | mplayer -playlist -

这很好用。 (减去控件)

我尝试这样做:(如上述问题中所建议的)

ls -l | grep -e mp3 -e wav | awk '{i=index($0,$9); $0=substr($0,i); printf "./"$0"\n"}' | grep " " | mplayer -playlist /dev/fd/3 3<&0 </dev/tty

它给了我这个:

Playing /dev/fd/./Pink Floyd - Another Brick in the Wall.mp3.
File not found: '/dev/fd/./Pink Floyd - Another Brick in the Wall.mp3'
Failed to open /dev/fd/./Pink Floyd - Another Brick in the Wall.mp3.

有人可以解释我做错了什么(以及如何解决它?)

目前使用 sh 运行 ubuntu 12.10。

答案1

只是您的文件路径是相对的,并且 mplayer 似乎将其解释为相对于播放列表的位置(而不是您的工作目录或其他位置)。对于零次近似,您可以将“./”替换为当前目录,但我发现更容易的是使用

find "$(pwd)"  -maxdepth 1 -name \*.mp3 -o -name \*.wav | mplayer -playlist /dev/fd/3 3<&0 0</dev/tty

(所以你的ls, grep,awk被这个 取代find。诚然,我没有完全仔细检查它是否完全等效。删除 -maxdepth 会使其递归到子目录中,这可能就是你想要的?man find是你的朋友。 )

答案2

mplayer认为播放列表中的相对路径是相对于播放列表所在目录的。尝试使用绝对路径;将你的awk脚本更改为类似的内容

awk -v dir="$(pwd)" '{ ... ; printf dir "/" $0 "\n" }'

相关内容