最新バージョンのパッケージを自動的に選択する方法

最新バージョンのパッケージを自動的に選択する方法

一部のパッケージはデフォルトで最新バージョンに設定されており、名前にバージョン番号が含まれていません。たとえば、PHP

$ apt-cache search php*-fpm --names-only

php-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) (default) php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)

これがすべてのパッケージに該当するわけではありません。命名規則に従って最新のパッケージを自動的に選択するbash機能を実行したいと思います。

たとえば、最新バージョンをインストールするには、oracle-java-installer次の手順を実行します。

sudo add-apt-repository ppa:webupd8team/java -y && sudo apt-get update

aptget install oracle-java*-installer

これが私のaptget機能がどのように機能するかです。

apt-cache次の4つの結果を検索して検索する必要がある正規表現があります。

oracle-java7-installer - Oracle Java(TM) Development Kit (JDK) 7
oracle-java6-installer - Oracle Java(TM) Development Kit (JDK) 6
oracle-java8-installer - Oracle Java(TM) Development Kit (JDK) 8
oracle-java9-installer - Oracle Java(TM) Development Kit (JDK) 9

oracle-java9-installer結果から抽出され、apt-get installパッケージ名を使用して実行されます。

私が使った正規表現はここでうまくいきます。正規表現しかし、端末で動作するように正しく外れることはできません。

apt-cache search結果から最新のパッケージ名を抽出する方法が見つかりませんでした。

function aptget(){

    pkg="$2"
    # versionRegex="(\d+\.)?(\d+\.)?(\d+)?"
    result="${pkg/\*/$versionRegex}"

    pkg_list=$(apt-cache search --names-only "^$result$")

    echo $pkg_list

    # pkg=

    set -- "${@:1:1}" "$pkg" "${@:3}"
    sudo apt-get "$@"
}

bashで正規表現を操作するのに役立つ必要があり、最新のパッケージの名前だけを検索する方法についてのコメントも聞きたいです。

答え1

これはとても悪い考えです。命名規則は、メジャーバージョン間でコンテンツが中断されるのを防ぐことです。

すべての展開には、特定の主要ソフトウェアの特定のバージョンが必要です。 python 2.xをpython3に置き換えると、システムが利用できなくなり、回復できなくなります。

答え2

function apt-get-latest(){
    set -- "${@:1:1}" "$(apt-cache-search-latest $2)" "${@:3}"
    sudo apt-get "$@"
}

function apt-cache-search-versions(){
    pkg="$1"
    prefix=${pkg%\**}
    suffix=${pkg#*\*}
    echo "$(apt-cache search --names-only "^$prefix*" | awk '{ print $1 }' | sort | grep -P ^$prefix'(\d+\.)?(\d+\.)?(\d+|)'$suffix$)"
}
function apt-cache-search-latest(){
    echo "$(apt-cache-search-versions $1 | tail -1)"
}

使用法

sudo add-apt-repository ppa:webupd8team/java -y 
sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update

apt-cache-search-versions php*-fpm 
=> php5.6-fpm php7.0-fpm php7.1-fpm php-fpm

apt-cache-search-versions oracle-java*-installer 
=> oracle-java6-installer oracle-java7-installer oracle-java8-installer oracle-java9-installer


apt-cache-search-latest php*-fpm 
=> php-fpm

apt-cache-search-latest oracle-java*-installer 
=> oracle-java9-installer


apt-get-latest install php*-fpm
apt-get-latest install oracle-java*-installer 

関連情報