我用另一个命令向 mplayer 提供文件列表:
beet ls somequery -p | xargs -d '\n' mplayer
当以这种方式调用时,mplayer 不会对任何标准键做出反应,我所能做的就是 Cc 中断它。
- 为什么会发生这种情况?
- 如何使 mplayer 正常运行(无需编写任何更大的代码、没有循环、正则表达式或多个管道)?
答案1
James 的想法可以在没有额外文件描述符的情况下实现:
beet ls QUERY | xargs -d '\n' sh -c 'mplayer "$@" < /dev/tty'
手册页中建议了相同的方法xargs
(最后一个例子,生成副本emacs
)。
答案2
基于这个答案通过传递参数find
,我得出了以下脚本:
$ beet ls QUERY | mplayer -playlist /dev/fd/3 3<&0 </dev/tty
我的理解是:mplayer
被告知要读取/dev/fd/3
播放列表文件。文件描述符 3 ( ) 由命令中的标准输入 ( )/dev/fd/3
填充。输入被指定为控制终端 ( )。因为 mplayer 是从文件而不是 stdin 读取的,所以你可以用键盘来控制它。3<&0
beet
mplayer
</dev/tty
这在 Mac OS 10.8.3 下对我有效。