-1

パッケージビルドの依存関係を取得するために、debian 制御ファイルを解析する関数を作成しています。以下は機能していない機能です。

Build-Depends:Debian 制御ファイルは、常にコロン ( ) が続く特定の「タイトル」 (つまり: ) によってのみ区切られます:。これにより、同じ行にタイトルがない複数の依存関係が複数の行にリストされる可能性が生じますBuild-Depends(そうでなければ、すでにこれが機能しているはずです)。

私が見ている特定の問題は、grep ラインから「コマンドが見つかりません」というエラーが発生することです。「コマンド」は、制御ファイルからの単語/テキストです。スクリプトに関する私の知識は限られています。これをまとめるために「google」を使用したので、ヒントをいただければ幸いです。

function FindDep ()
{
  CheckVar=0
  echo "Running Find Depend."
  ControlPath=$TmpBuild/Deb-ConfFiles/$1/debian/control
  cat $ControlPath | while read line ;  
  do
    TempVar=`grep Build-Depends $line`
    if [ "$TempVar" != "" ]; then
       BuildDep=`sed s/Build-Depends://g $TempVar | sed s/Build-Depends-Indep\://g | grep -o '[a-z]*[-]*[a-z]*'`
       CheckVar=1
    elif [ $CheckVar == 1 ]; then
        TempVar=`grep : $line`
        if [ "TempVar" != "" ]; then   
           BuildDep="$BuildDep `sed s/Build-Depends://g $TempVar | sed s/Build-Depends-Indep\://g | grep -o '[a-z]*[-]*[a-z]*'`"
        else
           CheckVar=0
        fi
    fi
  done
  echo "Here is what is listed as dep for " $1 "--" $BuildDep
  for y in $BuildDep; do
    echo $y
    IsInstalled="dpkg -s $y | grep Status"
    if [ "$IsInstalled" == "" ]; then
      echo "installing " $y
      dpkg -i $y > /dev/null 2>&1
      if [ $? -gt 0 ]; then
        apt-get -f --force-yes --yes install >/dev/null 2>&1
      fi
      dpkg -i $y > /dev/null 2>&1
    fi
  done
  echo "Ending Find Depend"
}
4

1 に答える 1

0

変数を参照するすべての行をエスケープすることから始めます。たとえば、これを回します...

ControlPath=$TmpBuild/Deb-ConfFiles/$1/debian/control

これに:

ControlPath="$TmpBuild/Deb-ConfFiles/$1/debian/control"

これが理由です:

$ y=hello world
bash: world: command not found

$ y="hello world"

$ cat $y       
cat: hello: No such file or directory
cat: world: No such file or directory

$ cat "$y"
cat: hello world: No such file or directory
于 2012-04-09T13:57:03.013 に答える