Linux
如何在 bash 腳本中獲取命令的版本
因此,正如問題所暗示的那樣,我想在 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
。)