답변:
이를 수행하는 방법에는 여러 가지가 있습니다.
dpkg-parsechangelog | sed -n 's/^Version: //p'
또는 대안 적으로 :
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
deb-control(5)
man 페이지가 명확하게 형식을 설명하지 않고, 나는 어떤 가정을하고 싶지 않다. 예를 들어, 필드가 한 줄에서 시작해야한다는 것을 명확하게하지 않습니다 ( "필드는 필드 태그로만 구분됩니다"). 또한 필드는 여러 줄에 걸쳐있을 수 있으며 태그와 값 사이의 간격에 대해서는 아무 것도 말하지 Version:123
않으므로 별도의 Version 필드가 아닌 이전 필드의 연속으로 해석되어야합니다 (결핍으로 인해) 콜론 뒤에 공백의).
dpkg-parsechangelog
는 다음과 같습니다. Version: 0.6.11-2
보다 강력한 debian/control
형식의 구문 분석을 수행하려는 경우 python-debian
또는을 사용할 수 있습니다 libparse-debcontrol-perl
.
dpkg-parsechangelog
sed / grep을 통한 출력 파이프는 완전히 견고해야합니다. dpkg-parsechangelog
출력 형식 및 대부분의 다른 데비안 스타일 제어 파일에 대한 자세한 내용을 보려면 RFC 822를 참조하십시오 . deb 패키지 버전에는 개행 문자, 공백 또는 기타 특수 문자 나 제어 문자 ( man deb-version
) 가 포함되어 있지 않아도되므로 Version: blah
출력에 " "행이 항상 표시되고 항상 단일 행이됩니다. 개인적인.
그러나 changelog에서 현재 버전 번호를 얻기 위해 실행 dpkg-parsechangelog
하는 매우 무거운 프로그램입니다. 결과를 제공하기 위해 Perl을 실행하고 엄청나게 많은 수의 라이브러리를로드해야하며, 대부분 사용하지 않을 것입니다. 느린 플랫폼 또는 느린 파일 저장 매체 또는이 버전 구문 분석을 여러 번 수행해야하는 경우 상당히 느려집니다. 대신 첫 번째 줄의 첫 번째 괄호 안에있는 것을 사용하십시오.
head -1 debian/changelog | awk -F'[()]' '{print $2}'
changelog
표준 형식을 사용하는 유효한 파일로 올바른 현재 패키지 버전을 얻을 수 있습니다 (비표준 debian/changelog
형식은 모든 실제적인 목적으로 사용되지 않습니다).
내가 본 것처럼 패키지 버전은 변경 로그 파일의 헤더 부분으로 구성됩니다. 그래서 당신은 그것을 할 수 있습니다
pkgver=$(dpkg-parsechangelog | head
예를 들어 설치된 패키지에 대해이 명령을 시도했습니다
aptitude changelog shutter | head
&
jai@frank-Jai:~$ aptitude changelog shutter | head
Get: Changelog of shutter
shutter (0.89.0-0ubuntu1) quantal; urgency=low
* New upstream release.
- Adds an AppIndicator (LP: #805464).
* debian/control: Recommend libgtk2-appindicator-perl
-- Andrew Starr-Bochicchio <a.starr.b@gmail.com> Sat, 11 Aug 2012 17:36:18 -0400
shutter (0.88.3-1) unstable; urgency=low
jai@frank-Jai:~$