mplayerの引数として、ファイル名のリスト=> mplayerはファイル名を認識できません。

mplayerの引数として、ファイル名のリスト=> mplayerはファイル名を認識できません。

mplayer一部の音楽ファイルをランダムに再生したいです。私はこれのためにプレーヤーを変更したくありません。ここで何が間違っているのか理解したいです。

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

結果出力はls | sort -Rファイル名のランダム出力であることがわかります。しかし、奇妙な理由でファイルが見つからないため、再生できません。ここでは注文は重要ではありません。

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

編集するmplayer *:もちろん、作品を使ってファイルを再生することもできます。

答え1

問題は、*rc次のいずれかのファイルにエイリアスが定義されている可能性があります。

alias ls='ls --color=always'

この場合、カラーコードはパイプラインに保持され、mplayerファイル名はこれらのコードで囲まれています。コマンド置換の出力をパイプすることで、実際に受信した内容を確認$()できます。printfmplayer

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

あなたは次のようなものを見るでしょう

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

明らかに、mplayer「該当するファイルまたはディレクトリなし」を正しく報告し、エスケープコードを含む問題の完全なファイル名を印刷しますが、再びシェルはこれらのコードを色として解釈するため、混同される可能性がある出力でのみ表示されます。

ファイル名を正しく渡すには、エイリアスが使用されず、デフォルトのコマンドが使用されるように新しいシェルを実行または起動\lsします。command lsbash -fbash

$ printf '%q\n' $(\ls | sort -R)
File_1.ogg
File_2.ogg
File_3.ogg

答え2

私は本当にあなたがここに関与してはいけないと思い、lsここsortにまったく関与してはいけないと思います。ファイルをランダムな順序で再生するには、次の-shuffleオプションを使用します。

mplayer -shuffle *

関連情報