2012-09-18 52 views
1

我寫了一個腳本來簡化Android源的同步和構建。我嘗試添加一個功能來挑選修補程序,但我無法正常工作。我知道這是因爲前斜線,但我不知道如何保護/逃避它們。代碼在變量中使用正斜槓

部分是:

echo "Copy/paste the project folder, i.e. 'frameworks/base'" 
    read folder 
    echo "" 
    echo "Now paste the cherry-pick git link, i.e. 'git fetch <someproject> refs/changes/... && git cherry-pick FETCH_HEAD'" 
    read cherry 
    echo "" 
    Begin 
    clear 
    echo "" 
    export IFS="&&" 
    for x in $cherry 
    do 
     cd ${CM}/${folder} 
    CHERRY=$(trim "$x") 
    $CHERRY 
    done 

讓我們說, '櫻桃' 變量是:

git fetch http://r.cyanogenmod.com/CyanogenMod/android_frameworks_base refs/changes/68/22968/2 && git cherry-pick FETCH_HEAD 

我會得到這個錯誤:

/home/tristan202/bin/build_cm.sh: line 159: git fetch http://r.cyanogenmod.com/CyanogenMod/android_frameworks_base refs/changes/91/23491/2: No such file or directory 
/home/tristan202/bin/build_cm.sh: line 159: git cherry-pick FETCH_HEAD: command not found 

我想不通爲什麼它失敗了。

它調用的'trim'函數是一個修剪前後空格的函數。如果我在for循環中回顯「$ CHERRY」,則命令打印正確,但仍然失敗。

回答

0

一旦你穿上&&在它停止一個變量被解釋爲分隔兩個命令:

$ A="echo a && echo b" 
$ echo $A 
echo a && echo b 
$ echo c && ${A} 
c 
a && echo b 

所以,你需要避免將&&到一個變量。

git甚至告訴你,&&是錯誤信息中的問題。

+0

所以我需要做的是寫從格里特分裂了git的命令幾行代碼,以便它在將其分解&&。這足夠嗎? – tristan202

3

我會給你一個例子:

cmd='echo hello && echo world' 
$cmd 

結果是:

hello && echo world 

慶典解析命令$cmdSimple CommandsLists of Commands
Parameter Expansion之後,&&作爲參數傳遞給echoWord Splitting之後的第1個字)。


該解決方案是拉動&&出來:

cmd1='echo hello' 
cmd2='echo world' 
$cmd1 && $cmd2