2014-03-05 62 views
1

我有一個小小的bash腳本,應該讀取文件並在mplayer中播放每一行。但它只播放每個文件1秒鐘,然後進入下一首歌曲。只有文件的最後一行正在播放。以下是我迄今爲止:while read line,only reading last line

#!/bin/bash 

file=/home/dummy/list.m3u 

echo "################################" 
while IFS= read -r line 
     do 
      echo "loadfile '$line'" > /tmp/mplayer.fifo 
done < $file 

文件中的行只包含路徑像這樣的MP3:/home/dummy/song.mp3

我怎樣才能發揮各條線和後歌曲結束開始下一首歌曲?

此外,有沒有辦法以隨機順序讀取行?

在此先感謝。

+0

使用'>>'代替'>'作爲_appending_。 – devnull

回答

3

Only the last line in the file is being played properly.

使用>>而不是>附加。您正在使用每次覆蓋文件的>,因此您只能看到文件中的最後一行。

Also, is there a way to read the lines in a random order?

你可以使用shufsort

while IFS= read -r line 
do 
    echo "loadfile '$line'" >> /tmp/mplayer.fifo 
done < <(shuf $file) 

sort -R filename將進行隨機排序。

+0

感謝您的快速回復:shuf $文件似乎有效,但它仍然只播放一首歌曲。 – Coenster

+0

@ user3343273這一定是因爲你正在使用'>'而不是'>>'。 – devnull

+0

這就是我的腳本現在的樣子: – Coenster

0
#!/bin/bash 

file=/home/dummy/list.m3u 
shuf -n file > randomshuffled 
echo "################################" 
while IFS= read -r line 
do 
     echo "loadfile '$line'" >> /tmp/mplayer.fifo 
done < $(cat randomshuffled) 

查看>>用於追加文件中的行。如果你想清除隊列,並與新的歌曲開始 - 只需添加一行echo "" > /tmp/mplayer.fifowhile循環之前

而且在文件中shuf file > randomshuffled對行的隨機洗牌

您還可以使用

mplayer -shuffle -playlist /home/dummy/list.m3u 
+0

嘿感謝您的快速回復我用你的例子,但有一個錯誤:./script.sh:第9行:$ randomshuffled:模棱兩可的重定向 – Coenster

+0

'randomshuffled'是一個文件,而不是一個變量,所以'$'在重定向導致了問題。 – chepner