インストールされている場合にPPAをスキップするシェルスクリプト


8

新しいPPAを追加するか、既にインストールされている場合はスキップするスクリプトを作成したいと思います。

誰かがこの解決策を別の質問に投稿しました:

#!/bin/bash 

add_ppa() {
      for i in "$@"; do
        grep -h "^deb.*$i" /etc/apt/sources.list.d/* > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
          echo "Adding ppa:$i"
          sudo add-apt-repository -y ppa:$i
        else
          echo "ppa:$i already exists"
        fi
      done
    }

条件付きでaptリポジトリを追加するシェルスクリプト

私の場合ppa:otto-kesselgulasch/gimp-edge、を追加したいのですが、これをスクリプトのどこに追加することになっているかわかりません。

私は試しましたadd_ppa(ppa:otto-kesselgulasch/gimp-edge)が、次のエラーが表示され続けます(ppaは私のスクリプトの名前です):

ppa: 1: ppa: Syntax error: word unexpected (expecting ")")

私はまた、ppaと()の間にスペースを入れてみました

ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected

誰かが私が間違っていることを教えてもらえますか?


2
質問を編集してスクリプトを含めると、問題のある場所を簡単に診断できるので便利です。
アロニカル2018年

回答:


9

これはbash関数であり、bash関数に引数を渡すためには必要ありません()。また、関数はppa:引数に接頭辞を追加するため、次のようにします。

add_ppa otto-kesselgulasch/gimp-edge

さらに、関数は複数の引数をサポートしているため、複数のPPAに対して実行できます。

add_ppa otto-kesselgulasch/gimp-edge foo/bar a/b

関数をスクリプトに入れたら、次のいずれかを行う必要があります。

  • シェルで関数を取得して関数を呼び出すようにZannaが提案するように、それをソースします。または、
  • 関数の内容をスクリプトとして使用するだけです。

    #! /bin/bash
    for i in "$@"; do
      if grep -Rq "^deb.*$i" /etc/apt/sources.list.d/*.list
      then
        echo "Adding ppa:$i"
        sudo add-apt-repository -y ppa:$i
      else
        echo "ppa:$i already exists"
      fi
    done
    

    そして、PPA名でスクリプトを呼び出します。

    ppa otto-kesselgulasch/gimp-edge

3
ちょっとしたメモですが、ドロップできますin "$@"for i; do位置パラメータをループします。
ケビン

6

ファイルをスクリプトとして実行していると思いますが、これは関数の定義にすぎないため、実行時に関数が呼び出されることはありません。

何も追加する必要はありません。その中のどこかにPPAを追加する必要はありません。sourceファイルを作成して、現在のシェルで関数を呼び出すことができます。

. ppa
add_ppa otto-kesselgulasch/gimp-edge

(保存したファイルがと呼ばppaれ、現在の作業ディレクトリにあり、投稿した例とまったく同じ内容であると仮定します)

関数を実際に呼び出す行を追加する場合は、スクリプトとして実行することもできます。最後に次のような行を追加することで、PPAをハードコードできます。

add_ppa otto-kesselgulasch/gimp-edge

次にスクリプトを実行します。しかし、そのようにすると、新しいPPAを追加するたびにファイルを編集する必要があります...

代わりに、次のような行を追加して、スクリプトに渡されたすべての引数で関数を呼び出すことができます。

add_ppa "$@"

その後、スクリプトが呼び出されたとき:

./ppa otto-kesselgulasch/gimp-edge thing/stuff etc/andSoOn

3

特にadd_ppa関数の定義で、スクリプトにタイプミスがあったようです。

エラーメッセージ:

ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected

add_ppaが関数として認識されていないことを示します。

関数を定義するとき(に代わりに使用した可能性が{あります。この間違いを修正すれば、関数は正しく動作するはずですが、muruの回答に示されているように使用する必要があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.