Lista de nomes de arquivos como argumento para mplayer = o mplayer não reconhece os nomes dos arquivos

2

Eu quero tocar alguns arquivos de música com mplayer aleatoriamente. Eu não quero mudar o jogador para isso, eu quero entender o que está errado aqui.

ThePandaTooth $ ls
file_1.ogg
file_2.ogg
file_3.ogg

Eu sei, a saída de ls | sort -R resulta em uma saída aleatória de nomes de arquivos. Mas eu não posso tocá-los, com um motivo estranho, não consigo encontrar o arquivo. A classificação é irrelevante aqui.

ThePandaTooth $ mplayer $(ls | sort -R)
Playing file_1.ogg.
Cannot open file 'file_1.ogg': No such file or directory
Failed to open file_1.ogg

Playing file_2.ogg.
Cannot open file 'file_2.ogg': No such file or directory
Failed to open file_2.ogg

EDITAR : reproduzir os arquivos com mplayer * funciona, é claro.

    
por toogley 02.01.2016 / 21:35

2 respostas

4

É muito provável que o problema é que você definiu um alias em um dos arquivos *rc :

alias ls='ls --color=always'

Nesse caso, os códigos de cores sobrevivem às linhas de tubulação e mplayer obtém os nomes dos arquivos contidos nesses códigos. Você pode passar a saída da substituição de comando $() para printf para ver o que mplayer realmente recebe, por exemplo

printf '%q\n' $(ls | sort -R)

Você veria algo como

$'\E[01;35mFile_1.ogg\E[0m'
$'\E[01;35mFile_2.ogg\E[0m'
$'\E[01;35mFile_3.ogg\E[0m'

Obviamente, mplayer informa corretamente 'Nenhum arquivo ou diretório' e imprime nomes de arquivos completamente problemáticos, incluindo os códigos de escape, mas o shell mais uma vez interpreta esses códigos como uma cor, para que você veja apenas nomes na saída confundir.

Para passar nomes de arquivos corretamente, execute \ls ou command ls ou inicie um novo shell com bash -f , para que bash não use um alias, mas o comando nativo

$ printf '%q\n' $(\ls | sort -R)
File_1.ogg
File_2.ogg
File_3.ogg
    
por 02.01.2016 / 22:07
1

Eu realmente não acho que você deveria estar envolvendo ls ou sort aqui. Se você quiser reproduzir os arquivos em uma ordem aleatória, basta usar a opção -shuffle :

mplayer -shuffle *
    
por 03.01.2016 / 03:31