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
하지 않으며 입니다 .centos
release
4.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
버전과 번호 사이에 대시(또는 공백)가 있으면 다음을 수행할 수 있습니다.
sed
s/^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