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

「cherry」変数が次のようになっているとしましょう:

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

なぜ失敗するのかわかりません。

それが呼び出す「トリム」関数は、先頭と末尾のスペースをトリミングする関数です。for ループ内で "$CHERRY" をエコーすると、コマンドは正しく出力されますが、それでも失敗します。

4

2 に答える 2

3

別の例を示します。

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

結果は次のとおりです。

hello && echo world

bashはコマンド$cmdSimple Commandsnotとして解析しLists of Commandsます。
の後Parameter Expansion&&は引数としてecho(後の最初の単語Word Splitting)に渡されます。


解決策は次の&&とおりです。

cmd1='echo hello'
cmd2='echo world'
$cmd1 && $cmd2
于 2012-09-18T14:24:32.690 に答える
0

&&変数を入力すると、2つのコマンドを分離するものとして解釈されなくなります。

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

&&したがって、変数を入れないようにする必要があります。

&&gitは、エラーメッセージの問題であるとさえ言っていました。

于 2012-09-18T14:23:54.523 に答える