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