2014-03-05 2 views
1

파일을 읽고 각 줄을 mplayer로 재생해야하는 bash 스크립트가 있습니다. 그러나 각 파일의 1 초만 재생 한 후 다음 노래로 이동합니다. 파일의 마지막 행만 제대로 재생됩니다. /home/dummy/song.mp3읽는 동안 마지막 줄만 읽기

나는 각 행을 재생할 수있는 방법

이후 :

#!/bin/bash 

file=/home/dummy/list.m3u 

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

파일의 선은 바로이 같은 MP3 파일의 경로를 포함 : 여기에 지금까지 무엇을 가지고 노래가 끝나면 다음 노래가 시작됩니까?

또한 임의의 순서로 줄을 읽는 방법이 있습니까?

미리 감사드립니다.

+0

_appending_은'>'대신'>>'을 사용하십시오. – devnull

답변

3

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

사용 >> 대신 >에 대한 를 추가. >을 사용하면 매번 파일을 덮어 쓰게되므로 파일의 마지막 줄만 표시됩니다.

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

말하는 sort -R filename 무작위로 정렬을 수행합니다 :

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

당신은 shuf 또는 sort가 사용할 수 있습니다.

+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) 

파일에 줄을 추가하는 경우 >>을 참조하십시오. 대기열을 지우고 새 노래로 시작하려면 - 단지

그리고 파일의 행 랜덤 셔플의 shuf file > randomshuffled

또한 사용할 수있는 while 루프 전에 라인 echo "" > /tmp/mplayer.fifo를 추가

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

안녕하십니까, 답장을 보내 주셔서 감사합니다. 오류가 있습니다. ./script.sh : line 9 : $ randomshuffled : 모호한 리디렉션 – Coenster

+0

'randomshuffled'는 변수가 아닌 파일이므로'$'in 리디렉션이 문제의 원인입니다. – chepner

관련 문제