따라서 질문에서 알 수 있듯이 터미널을 사용하는 대신 bash 스크립트에서 명령 버전을 얻고 싶습니다.
사용 가능한 모든 명령이 디렉터리에 파일로 존재한다는 것을 알고 있습니다./usr/빈. 그러나 버전은 제공하지 않으며 cat을 (명령) 파일 중 하나로 사용할 때 몇 가지 흥미로운 정보를 제공합니다.
예를 들어 cat /usr/bin/man
-주어진-
이것은 무엇이며 버전을 얻는 방법은 무엇입니까?
우분투 20.04를 사용하고 있습니다.
여기에 물어보는 것이 어리석은 질문이라는 것을 알지만 아무것도 찾을 수 없습니다. :/
아마도 최종 편집 - 허용된 답변이 저에게 효과적이었고 이 기능을 사용하고 있습니다.
나중에 나는 비슷한 일이 foo --version
효과가 있다는 것을 깨달았습니다.
그러나 버전을 저장하기 위해 변수를 사용하는 경우 구문에 주의해야 합니다. 제가 한 일은 잘못되었습니다. 이것이 작동한다는 점을 지적한 @Romeo Ninov에게 감사드립니다
foo --version
.
이런 어리석은 실수를 해서 정말 죄송합니다.
답변1
Debian 기반 배포판을 사용하는 경우 패키지 관리자를 사용하여 이 문제를 해결할 수 있습니다.
$ dpkg -S '*bin/man'
man-db: /usr/bin/man
이것은 우리 man-db
가 그것을 가지고 있음을 말해줍니다 /usr/bin/man
.
$ dpkg -l man-db
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii man-db 2.10.2-1 amd64 tools for reading manual pages
man-db
그런 다음 어떤 버전이 설치되었는지 물었습니다 . 이는 배포 완료를 나타내는 추가 패치가 포함된 man-db
배포 릴리스의 업스트림 버전입니다 . 여기에는 빌드 규칙만 포함될 수 있지만 이후 버전에서 이식된 수정 사항도 포함될 수 있습니다.2.10.2
-1
-1
2.10.2
dpkg-query
추출 버전에 사용 가능:
$ dpkg-query -W -f '${Version}\n' man-db
2.10.2-1
이 모든 것을 종합하면 다음과 같습니다.
$ dpkg-query -W -f '${Version}\n' $(dpkg -S '*bin/man' | cut -d: -f1)
2.10.2-1
또는 입력할 수 있는 기능 .bashrc
:
ver() {
package=$(dpkg -S "*bin/$1" | cut -d: -f1)
version=$(dpkg-query -W -f '${Version}' "$package")
printf "%s\n" "$version"
}
ver man
2.10.2-1
(뒤에는 dpkg -S
이지만 dpkg-query -S
, dpkg-query -S
와 합칠 수는 없습니다 -W -f
.)
답변2
AFAIK에는 임의의 명령에서 버전을 가져오는 고정된 단일 방법이 없습니다 foo
(실행하거나 실행 파일을 분석하여). 어떤 사람은 , , , ... foo
에 대해 말할 수도 있고 foo -v
, 다른 사람은 , , , ... 에 대해 말할 수도 있습니다 foo -V
.foo --version
foo --help
foo -h
man foo
도구가 어떤 옵션을 지원하는지 알아보려면 설명서( )를 읽어보세요 . 매뉴얼 자체에서 버전을 알려줄 수 있지만(보통 맨 아래 또는 그 근처), 이 경우에는 매뉴얼에서 설명하는 버전이지 반드시 foo
사용할 수 있는 버전은 아닙니다. foo
도구와 설명서가 저장소에서 설치된 시스템에서는 일치해야 하지만 일반적으로 foo
설명서에 설명된 것과 다른 버전(또는 여러 버전)을 구하여 사용할 수 있습니다.
배포판에서 사용하는 패키지 시스템은 설치된 패키지 버전(Debian 및 그 파생 제품(Ubuntu 포함)의 예). 사용하려는 도구가 어떤 패키지에 속하는지 알고 있는 경우(다시 말하지만, 데비안과...), 도구 버전은 일반적으로 패키지 버전에서 추론할 수 있습니다.
일반적으로 실행 파일은 바이너리 형식일 수도 있고 아닐 수도 있습니다. 이는 모든 인터프리터를 위한 스크립트일 수 있습니다. 파일의 어느 곳에나 해당 버전을 포함하거나 출력에 보고할 필요는 없습니다. 어떤 경우에는 버전의 전체 개념이 적용되지 않습니다. 예를 들어 내 스크립트는이 다른 답변할당된 버전이 없습니다. 마찬가지로 이 래퍼를 분석했습니다.또 다른 답이 있다버전이 없습니다(버전이 있는 패키지와 함께 제공되지만).
foo -V
결론은 특정 실행 파일이 아니고 스크립트를 이에 맞게 조정하지 않는 한 실행 파일 자체에서 임의의 실행 파일 버전을 안정적으로 얻을 수 없다는 것입니다.이 특정 실행 파일에 대한 올바른 내용은 무엇입니까?). 패키지 버전을 얻을 수 있습니다.
나는 볼 수 있다이 답변은 동시에 작성되었습니다.특정 실행 파일을 소유한 패키지 버전을 가져오는 방법을 제공합니다. 그러면 나는 그것을 재발명하지 않을 것입니다.
답변3
명령 버전을 얻는 일반적인 방법은 다음과 같은 명령을 사용하는 것입니다.
man --version
이렇게 하면 여러 줄의 답변이 나올 수 있으므로 이를 관리해야 합니다. 또한 각 명령에 대해 man
페이지를 검사할 수 있습니다. 예를 들어:
man man
마침내 버전을 볼 수 있습니다. 바이너리에서 직접 가져오려면 다음을 사용해 보십시오.
strings /usr/bin/man
결과를 필터링하고