Mplayer управляет при использовании плейлистов stdin

Я столкнулся с этим сообщением: как сохранить консольный ввод в mplayer при чтении из stdin?

Но ответ там не работает для меня.

Я выполняю следующую команду:

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. 

может кто-то объяснить, что я делаю неправильно (и как это исправить?)

В настоящее время работает ubuntu 12.10 с использованием sh.

Это просто, что ваши пути к файлам относительны, и 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 здесь твой друг.)

mplayer считает относительные пути в списке воспроизведения относительно каталога, в котором находится список воспроизведения. Попробуйте использовать абсолютные пути; измените свой awk скрипт на что-то вроде

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