O Mplayer controla ao usar listas de reprodução stdin

2

Eu encontrei este post: Como posso manter a entrada do console no mplayer ao ler o stdin?

Mas a resposta não funciona para mim.

Estou executando o seguinte comando:

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

e isso funciona bem. (menos controles)

Eu tento isso: (como proposto na pergunta acima)

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

e isso me dá isso:

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.

alguém pode explicar o que estou fazendo errado (e como consertar isso?)

Atualmente executando o ubuntu 12.10 usando sh.

    
por Tyzoid 09.11.2012 / 03:13

2 respostas

2

É apenas que os seus caminhos de arquivo são relativos, e o mplayer parece interpretar isso como relativo à localização da lista de reprodução (e não ao seu diretório de trabalho ou qualquer outra coisa). Para uma aproximação zero, você pode substituir "./" pelo seu diretório atual, mas o que eu acho mais fácil é usar

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

(Então, o seu ls , grep , awk é substituído por este find . É verdade, eu não verifiquei completamente se é totalmente equivalente. Removendo o -maxdepth faria recursão em subdiretórios, o que você pode querer de qualquer maneira? man find é seu amigo aqui.)

    
por 09.11.2012 / 08:38
2

mplayer considera que os caminhos relativos na lista de reprodução são relativos ao diretório em que a lista de reprodução está. Tente usar caminhos absolutos; altere seu script awk para algo como

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