É 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