2014-03-05 101 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