릴리스와 버전만 가져오는 bash 명령

릴리스와 버전만 가져오는 bash 명령

conky에 들어가기 위해 배포판 이름과 버전 번호를 얻으려고합니다. 현재 다음을 사용하고 있습니다

rpm --query centos-release

~로 이어지다

centos-release 7-4.1708.e17.centos.x86_64

어떻게 하면 으로 줄일 수 있나요 centos 7-4.1708.e17?

모든 제안을 시도한 후 마침내 이것을 내 conky에 입력했습니다.

${font Roboto:bold:size=8}${goto 95}${color1}Distribution $alignr   ${execi > 60 a=$(rpm --query centos-release)
a=${a#centos-release }
a=${a%%\.centos.*}
echo "$a"}

이 결과로

centos-release-7-4.1708.e17

답변1

사용자 정의 형식으로 RPM 패키지의 이름과 세부 정보를 인쇄하는 보다 일반적인 방법은 명령 --qf또는 --queryformat옵션을 사용하는 것입니다 rpm.

man rpm부분 인용:

쿼리 형식은 표준 printf(3) 형식의 수정된 버전입니다. 형식은 정적 문자열(개행, 탭 및 기타 특수 문자에 대한 표준 C 문자 이스케이프를 포함할 수 있음)과 printf(3) 유형 포맷터로 구성됩니다. rpm은 인쇄할 유형을 이미 알고 있으므로 유형 지정자를 생략하고 {} 문자로 묶인 인쇄할 헤더 태그의 이름으로 바꿔야 합니다. 태그 이름은 대소문자를 구분하지 않습니다.

rpm를 실행하면 알려진 태그 이름 목록을 볼 수 있습니다 rpm --querytags. 이것은 긴 목록이므로 여기서 전체 내용을 재현하지는 않겠습니다. 그러나 몇 가지 흥미로운 태그는 다음과 같습니다.

name
n
version
v
release
r
arch
nvra
nvr
description

불행히도 당신에게는정밀한사용 사례에서 name관련 패키지는 이며 기대를 충족 centos-release하지 않으며 입니다 .centosrelease4.1708.el7.centos

따라서 순수 쿼리 형식을 사용하여 원하는 것과 가장 가까운 출력은 다음 rpm과 같습니다.

rpm -q centos-release --qf 'centos %{v}-%{r}\n'

("centos"는 "centos-release"로 확장되는 label 대신 정적 문자열을 사용합니다 %{n}. 또한 오타일 수 있지만 원하는 출력의 공백도 기록해 두십시오.)

내 테스트 상자에서 이 명령은 다음을 생성합니다.

$ rpm -q centos-release --qf 'centos %{v}-%{r}\n'
centos 7-2.1511.el7.centos.2.10
$ 

답변2

sed를 사용하세요:

$ rpm --query centos-release | sed 's/^centos-release//;s/\.centos.*//'
7-4.1708.e17

케이스만 포함:

#!/bin/sh

a=$(rpm --query centos-release)
a=${a#centos-release }
a=${a%%\.centos.*}
echo "$a"

답변3

centos-release버전과 번호 사이에 대시(또는 공백)가 있으면 다음을 수행할 수 있습니다.

  • seds/^centos-release.//( )를 사용하여 "centos-release-"를 " " 로 바꾸고
  • ".centos.*"를 ""( s/\.centos.*//) 로 바꾸십시오.
  • 표준 출력에는 버전만 표시됩니다.

$ rpm --query centos-release
centos-release-7-4.1708.el7.centos.x86_64

$ rpm --query centos-release | sed 's/^centos-release.//;s/\.centos.*//'
7-4.1708.el7

관련 정보