读取行时,只读取最后一行

时间:2014-03-05 06:52:01

标签: linux bash

我有一个小的bash脚本应该读取文件并在mplayer中播放每一行。但它只播放每个文件1秒,然后继续播放下一首歌曲。仅正确播放文件中的最后一行。以下是我到目前为止的情况:

#!/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

如何播放每一首歌并在歌曲结束后开始播放下一首歌?

另外,有没有办法以随机顺序读取行?

先谢谢。

2 个答案:

答案 0 :(得分:3)

  

只能正确播放文件中的最后一行。

使用>>代替> 追加。您正在使用>每次都会覆盖该文件,因此您只能看到文件中的最后一行。

  

另外,有没有办法以随机顺序读取行?

您可以使用shufsort

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

sort -R filename会执行随机排序。

答案 1 :(得分: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.fifo循环之前添加第while

文件

中随机随机播放的shuf file > randomshuffled

您也可以使用

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