通过 xargs 控制 mplayer 的运行

通过 xargs 控制 mplayer 的运行

我用另一个命令向 mplayer 提供文件列表:

beet ls somequery -p | xargs -d '\n' mplayer

当以这种方式调用时,mplayer 不会对任何标准键做出反应,我所能做的就是 Cc 中断它。

  1. 为什么会发生这种情况?
  2. 如何使 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<&0beetmplayer</dev/tty

这在 Mac OS 10.8.3 下对我有效。

相关内容