私は次の記事を見ました。stdinから読むときにmplayerでコンソール入力を維持する方法は?
しかし、そこへの答えは私には適していません。
次のコマンドを実行しています。
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.
誰かが私が何を間違っているか(そしてどのように修正するか)説明してもらえますか?
私は現在shを使ってUbuntu 12.10を実行しています。
答え1
ただファイルパスが相対的で、mplayerはこれをプレイリストの場所(作業ディレクトリなどではない)に相対的なものとして解釈するようです。ゼロ度近似の場合、「./」を現在のディレクトリに置き換えることができますが、使いやすくなります。
find "$(pwd)" -maxdepth 1 -name \*.mp3 -o -name \*.wav | mplayer -playlist /dev/fd/3 3<&0 0</dev/tty
(それで、あなたの、、はこれに置き換えられました。もちろん、それがまったく同等であることを正確に再確認しませんでしたls
。-maxlengthを削除するとサブディレクトリに戻ります。になってください。grep
awk
find
man find
答え2
mplayer
プレイリストの相対パスは、プレイリストがあるディレクトリに基づいて見なされます。絶対パスを試してください。awk
スクリプトを次のように変更します。
awk -v dir="$(pwd)" '{ ... ; printf dir "/" $0 "\n" }'