일부 패키지는 기본적으로 최신 버전으로 설정되어 있으며 이름에 버전 번호가 포함되어 있지 않습니다. 예를 들어 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
다음 네 가지 결과를 검색하고 검색해야 하는 정규식이 있습니다 .
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