2009-04-14 53 views
2

我試圖通過變量來設置藝術家信息,其中有空格。拉姆胡扯出來。也許我被bash推遲了?如何使用lame在shell腳本中編碼wav文件?

#!/bin/bash 
year=2008; 
artist="New Kids On The Block"; 
album="The Block"; 
bitrate=320; 
lame="lame -b $bitrate --ta \"$artist\" --tl \"$album\" --ty $year" 

function first_half 
{ 
    for ((i=1;i<10;i++)); do 
     $lame "track_0$i.wav" "track_0$i.mp3"; 
    done; 
} 

function second_half 
{ 
    for ((x=10;x<18;x++)); do 
     echo $lame "track_$x.wav" "track_$x.mp3"; 
    done; 
} 

first_half & 
first_pid=$! 

#second_half & 
#second_pid=$ 

這裏是腳本的輸出。

[email protected]:~/ogg/noartist/unknown_disc$ ./encode.sh 
[email protected]:~/ogg/noartist/unknown_disc$ lame: excess arg The 
lame: excess arg The 

Lame抱怨每次循環迭代...當然。

我改變了腳本來回顯循環的一個迭代,這就是輸出的內容。

lame -b 320 --ta "New Kids On The Block" --tl "The Block" --ty 2008 track_01.wav track_01.mp3 

這工作線罰款殼...我很困惑。我在這裏做錯了什麼?我知道它與我的變量中的空格有關,但我不知道如何解決它。

回答

1

「跛腳」應該是一個功能。 注意:我在同一個目錄「./lame」中運行「lame」,所以我可以使用另一個腳本來測試結果。

#!/bin/bash 
year=2008 
artist="New Kids On The Block" 
album="The Block" 
bitrate=320 

function lame() 
{ 
#local bitrate=$1 
#local artist=$2 
#local album=$3 
#local year=$4 
local in=$1 
local out=$2 
./lame -b "$bitrate" --ta "$artist" --tl "$album" --ty "$year" "$in" "$out" 
} 

function first_half 
{ 
    for ((i=1;i<10;i++)); do 
     lame "track_0$i.wav" "track_0$i.mp3" 
    done 
} 

first_half & 
first_pid=$! 

跛:

#!/bin/bash 

echo =============================================== 
echo $0 $* 
echo "0 ==> \"$0\"" 

CNT=1 
while true; do 
    echo -n "$CNT " 
    [ $CNT -lt 10 ] && echo -n " " 
    echo "==> \"$1\"" 
    CNT=$(($CNT + 1)) 
    shift 
    [ -z "$1" ] && break 
done 

echo =============================================== 

樣本輸出(部分):

=============================================== 
./lame -b 320 --ta New Kids On The Block --tl The Block --ty 2008 track_01.wav track_01.mp3 
0 ==> "./lame" 
1 ==> "-b" 
2 ==> "320" 
3 ==> "--ta" 
4 ==> "New Kids On The Block" 
5 ==> "--tl" 
6 ==> "The Block" 
7 ==> "--ty" 
8 ==> "2008" 
9 ==> "track_01.wav" 
10 ==> "track_01.mp3" 
=============================================== 
=============================================== 
./lame -b 320 --ta New Kids On The Block --tl The Block --ty 2008 track_02.wav track_02.mp3 
0 ==> "./lame" 
1 ==> "-b" 
2 ==> "320" 
3 ==> "--ta" 
4 ==> "New Kids On The Block" 
5 ==> "--tl" 
6 ==> "The Block" 
7 ==> "--ty" 
8 ==> "2008" 
9 ==> "track_02.wav" 
10 ==> "track_02.mp3" 
=============================================== 
0

我發現,我用了一個臨時的解決方案......

這是一個黑客攻擊的一位,但它的工作:

#!/bin/bash 
year="2008"; 
artist="\"New Kids On The Block\""; 
album="\"The Block\""; 
bitrate=320; 
genre="Pop"; 
lame="lame -b $bitrate --ta $artist --tl $album --ty $year --tg $genre" 

function first_half 
{ 
    echo "Encoding first half..."; 
    for ((i=1;i<10;i++)); do 
     echo $lame "track_0$i.wav" "track_0$i.mp3" > run1.sh; 
     bash run1.sh >/dev/null 2>/dev/null; 
    done; 
    rm -f run1.sh; 
} 

function second_half 
{ 
    echo "Encoding second half too..."; 
    for ((x=10;x<18;x++)); do 
     echo $lame "track_$x.wav" "track_$x.mp3" >run2.sh; 
     bash run2.sh >/dev/null 2>/dev/null; 
    done; 
    rm -f run2.sh; 
} 

first_half & 
echo $! > first_half.pid 

second_half 
echo $! > second_half.pid 

echo "Done!"; 
rm *.pid -f 
1

的問題是線

lame="lame -b $bitrate --ta \"$artist\" --tl \"$album\" --ty $year" 

,因爲之後的$ lame不止一次被評估。您可以運行

bash -xv ./encode.sh 

查看執行的命令和變量替換(而不是運行「bash -xv」,您可以在腳本中添加「set -xv」)。