Linux

如何在 bash 腳本中獲取命令的版本

  • July 8, 2022

因此,正如問題所暗示的那樣,我想在 bash 腳本中獲取命令的版本,而不是使用終端。

我知道所有可用的命令都作為目錄**/usr/bin**中的文件存在。但是它沒有給出版本,並且當您將 cat 用於(命令)文件之一時,它會給出一些有趣的資訊。

例如 -cat /usr/bin/man給出 -

有趣的輸出

這是什麼以及如何獲得版本?

我正在使用 Ubuntu 20.04。

我知道在這裡問一個愚蠢的問題,但我什麼也沒找到:/

據說最後的編輯 - 接受的答案對我有用,我正在使用該功能。

後來我也確實意識到類似的東西foo --version也會起作用

**但是,如果您使用變數來儲存版本,那麼您需要注意語法,我做錯了。感謝@Romeo Ninov 指出這

foo --version也有效。**

對於這些愚蠢的錯誤,我真的很抱歉。

如果你使用的是基於 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。)

引用自:https://unix.stackexchange.com/questions/709082