ファイルから条件付きでaptパッケージを一括インストールするにはどうすればよいですか?

ニコラス・アダモウ

ゴール

ファイルを使用して複数のAPTパッケージをインストールしたいのですが。

apt_install_from_file "packages" # assumes 'packages' is a readable file in the $PWD

これを行うには他の方法があることを理解しており、話すための車輪の再発明を行っていますが、この方法で他の人の生活が楽になることを願っています。

ファイル構造

packages

# ppa
ppa "deadsnakes/ppa"

# packages
apt "tree"

# deb
deb "fzy" [args: "https://github.com/jhawthorn/fzy/releases/download/0.9/fzy_0.9-1_amd64.deb", "$HOME", "fzy_0.9-1_amd64.deb"]

要件

  1. #コメントであるため、で始まる行は無視してください
  2. 行がで始まる場合はppa、引用符で囲まれたテキストを使用して次のコマンドを実行します。ppa "deadsnakes/ppa"=>sudo add-apt-repository -y ppa:deadsnakes/ppa &> /dev/null
  3. 行がで始まる場合はapt、引用符で囲まれたテキストを使用して次のコマンドを実行します。apt "tree"=>sudo apt install --allow-unauthenticated -qqy tree
  4. 行がで始まる場合は、deb引用符で囲まれたテキストとargs、引用符で囲まれた後続のテキストを取得します

現在の機能:

apt_install_from_file() {

    declare -r FILE_PATH="$1"

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    # Install package(s)

    if [ -e "$FILE_PATH" ]; then

        cat < "$FILE_PATH" | while read -r LINE; do
            if [[ "$LINE" == *"#"* || -z "$LINE" ]]; then
                continue
            elif [[ "$LINE" == *"ppa"* || -z "$LINE" ]]; then
                # ppa= Grab text enclosed by quotes following "ppa"
                sudo add-apt-repository -y ppa:"$ppa" &> /dev/null \
                   && sudo apt update
            elif [[ "$LINE" == *"apt"* || -z "$LINE" ]]; then
                package="$LINE" # Grab text enclosed by quotes following "apt"
                sudo apt install --allow-unauthenticated -qqy "$package"
            elif [[ "$LINE" == *"deb"* || -z "$LINE" ]]; then
                #package_name= Grab text enclosed by quotes following "deb"
                #url= Grab text enclosed by quotes following "args"
                #target_path= Grab text enclosed by quotes following "args"
                #file_name= Grab text enclosed by quotes following "args"
                #file_path="$target_path" + "/" + "$file_name"  

                wget $url -O $file_path && \
                   sudo dpkg -i $file_path && sudo apt-get install -f && \
                   sudo rm -rf $file_path && sudo apt autoremove -qqy
            fi
        done

    fi

}

問題

要件リストを指定して、関数の空白を埋めるのに助けが必要です。

ムル

ここで使用されている文法は、シェルスクリプトを実行していませんが、正規表現を使用すると、そのファイルを解析するのが少し簡単になります。Bashの正規表現の比較では、グループ(...)BASH_REMATCH配列に保存されるため、一度に有効な行をテストして解析できます。例えば:

#! /bin/bash
declare -A regex
regex["comment"]='^#(.*)'
regex["ppa"]='ppa "(.*)"'
regex["apt"]='apt "(.*)"'
regex["deb"]='deb "(.*)" \[args: "(.*)", "(.*)", "(.*)"\]'
while read LINE
do
    if [[ $LINE =~ ${regex[comment]} ]]
    then
        printf "Comment: %s\n" "${BASH_REMATCH[1]}"
        continue
    elif [[ $LINE =~ ${regex[ppa]} ]]
    then
        ppa=${BASH_REMATCH[1]}
        printf "PPA: %s\n" "$ppa"
    elif [[ $LINE =~ ${regex[apt]} ]]
    then
        package=${BASH_REMATCH[1]}
        printf "APT: %s\n" "$package"
    elif [[ $LINE =~ ${regex[deb]} ]]
    then
        package_name=${BASH_REMATCH[1]}
        url=${BASH_REMATCH[2]}
        target_path=${BASH_REMATCH[3]}
        file_name=${BASH_REMATCH[4]}
        file_path="$target_path/$file_name"

        printf "package_name: %s\n" "$package_name"
        printf "url: %s\n" "$url"
        printf "file_path: %s\n" "$file_path"
    fi
done < "$1"

サンプルファイルの場合:

$ ./foo.sh foo.txt
Comment:  ppa
PPA: deadsnakes/ppa
Comment:  packages
APT: tree
Comment:  deb
package_name: fzy
url: https://github.com/jhawthorn/fzy/releases/download/0.9/fzy_0.9-1_amd64.deb
file_path: $HOME/fzy_0.9-1_amd64.deb

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インストールされたパッケージから.debファイルを作成するにはどうすればよいですか?

分類Dev

インストールされたパッケージから.debファイルを作成するにはどうすればよいですか?

分類Dev

apt-getでパッケージをインストールできるようにするにはどうすればよいですか?

分類Dev

ファイル(package.deb)から推奨パッケージをインストールするにはどうすればよいですか?

分類Dev

ファイル(package.deb)から推奨パッケージをインストールするにはどうすればよいですか?

分類Dev

インストールせずにapt-getからパッケージをダウンロードするにはどうすればよいですか?

分類Dev

コンパイルされたソースファイルから.debパッケージを作成するにはどうすればよいですか?

分類Dev

MSIパッケージからファイルを抽出するにはどうすればよいですか?

分類Dev

NuGetパッケージの.nupkgファイルをローカルにインストールするにはどうすればよいですか?

分類Dev

.jsファイルでnpmがインストールされたパッケージを使用するにはどうすればよいですか?

分類Dev

デフォルトでインストールされているパッケージを一覧表示するにはどうすればよいですか?

分類Dev

スタックトレースからパッケージデータ[jarファイル名]を取得するにはどうすればよいですか?

分類Dev

インストールしなかったパッケージをAPTが保持しないようにするにはどうすればよいですか?

分類Dev

mailgunを使用して添付ファイル付きのバッチ/一括メールを送信するにはどうすればよいですか?

分類Dev

APTパッケージによってインストールされたすべてのファイルを一覧表示するにはどうすればよいですか?

分類Dev

conda environment.ymlファイルにインストールパッケージをpipするにはどうすればよいですか?

分類Dev

インストールしたファイルをCMAKEにパッケージ化するにはどうすればよいですか?

分類Dev

.whlファイルを含むPythonパッケージをインストールするにはどうすればよいですか?

分類Dev

ドキュメント付きのPythonパッケージをインストールするにはどうすればよいですか?

分類Dev

knitrにパッケージをインストールするにはどうすればよいですか?

分類Dev

TeXstudioにパッケージをインストールするにはどうすればよいですか?

分類Dev

TeXstudioにパッケージをインストールするにはどうすればよいですか?

分類Dev

apt-getを使用してパッケージの最新バージョンをインストールするにはどうすればよいですか?

分類Dev

apt-getを使用してパッケージの最新バージョンをインストールするにはどうすればよいですか?

分類Dev

Ubuntu 18.04に付属のソフトウェアパッケージを再インストールするにはどうすればよいですか?

分類Dev

ROracleパッケージをインストールするにはどうすればよいですか?

分類Dev

このパッケージをインストールするにはどうすればよいですか?

分類Dev

Unity NavMeshComponentsパッケージをインストールするにはどうすればよいですか?

分類Dev

nltk_dataをpip付きのパッケージとしてインストールするにはどうすればよいですか?

Related 関連記事

  1. 1

    インストールされたパッケージから.debファイルを作成するにはどうすればよいですか?

  2. 2

    インストールされたパッケージから.debファイルを作成するにはどうすればよいですか?

  3. 3

    apt-getでパッケージをインストールできるようにするにはどうすればよいですか?

  4. 4

    ファイル(package.deb)から推奨パッケージをインストールするにはどうすればよいですか?

  5. 5

    ファイル(package.deb)から推奨パッケージをインストールするにはどうすればよいですか?

  6. 6

    インストールせずにapt-getからパッケージをダウンロードするにはどうすればよいですか?

  7. 7

    コンパイルされたソースファイルから.debパッケージを作成するにはどうすればよいですか?

  8. 8

    MSIパッケージからファイルを抽出するにはどうすればよいですか?

  9. 9

    NuGetパッケージの.nupkgファイルをローカルにインストールするにはどうすればよいですか?

  10. 10

    .jsファイルでnpmがインストールされたパッケージを使用するにはどうすればよいですか?

  11. 11

    デフォルトでインストールされているパッケージを一覧表示するにはどうすればよいですか?

  12. 12

    スタックトレースからパッケージデータ[jarファイル名]を取得するにはどうすればよいですか?

  13. 13

    インストールしなかったパッケージをAPTが保持しないようにするにはどうすればよいですか?

  14. 14

    mailgunを使用して添付ファイル付きのバッチ/一括メールを送信するにはどうすればよいですか?

  15. 15

    APTパッケージによってインストールされたすべてのファイルを一覧表示するにはどうすればよいですか?

  16. 16

    conda environment.ymlファイルにインストールパッケージをpipするにはどうすればよいですか?

  17. 17

    インストールしたファイルをCMAKEにパッケージ化するにはどうすればよいですか?

  18. 18

    .whlファイルを含むPythonパッケージをインストールするにはどうすればよいですか?

  19. 19

    ドキュメント付きのPythonパッケージをインストールするにはどうすればよいですか?

  20. 20

    knitrにパッケージをインストールするにはどうすればよいですか?

  21. 21

    TeXstudioにパッケージをインストールするにはどうすればよいですか?

  22. 22

    TeXstudioにパッケージをインストールするにはどうすればよいですか?

  23. 23

    apt-getを使用してパッケージの最新バージョンをインストールするにはどうすればよいですか?

  24. 24

    apt-getを使用してパッケージの最新バージョンをインストールするにはどうすればよいですか?

  25. 25

    Ubuntu 18.04に付属のソフトウェアパッケージを再インストールするにはどうすればよいですか?

  26. 26

    ROracleパッケージをインストールするにはどうすればよいですか?

  27. 27

    このパッケージをインストールするにはどうすればよいですか?

  28. 28

    Unity NavMeshComponentsパッケージをインストールするにはどうすればよいですか?

  29. 29

    nltk_dataをpip付きのパッケージとしてインストールするにはどうすればよいですか?

ホットタグ

アーカイブ