Dash

如何在不借助包管理系統的情況下找出 dash 的版本號?

  • January 15, 2018

bash大部分時間都在使用,並且剛剛開始使用其他 shell。我開始dash並試圖找出它的版本號,但通常的方法喜歡-v$version不起作用。我可以理解這--version是行不通的,因為那是 GNU 特定的。我在網上搜了一下,找到了以下答案,都是求助於包管理系統。

如何判斷dash的版本號?(使用者使用的是 CentOS,所以答案取決於 Redhat Package Management 系統)

如何在 Ubuntu bin 上找到 dash shell 的版本?(這來自 AskUbuntu 網站,所以答案取決於高級軟體包工具)

dash那麼有沒有辦法在不借助包管理系統的情況下找出版本?如果沒有簡單的方法,我會很驚訝,因為我一直認為查詢軟體版本是最基本的功能之一。如果真的是這樣,我很樂意聽到一些解釋,例如這種設計背後的理念是什麼。我很樂意接受一種簡單的方法來獲取dash版本,而無需求助於包管理系統,或者接受一個令人信服的解釋(歷史觀點也可以),說明為什麼我不能將其作為公認的答案。

我一直認為查詢軟體版本是最基本的功能之一。

它不是。這是一個好主意,我們必須學習。

許多年前,我們沒有核心、包管理器和包儲存庫。我們有一個作業系統有一個版本,並且所有作業系統的組件程序都隱含地與作業系統的版本相關聯。對於 BSD 和 PC-DOS 都是如此。

1980 年代初的 AT&T 世界為我們提供了what程序和由原始碼控制系統將嵌入式版本字元串放入二進製文件的想法。有一段時間,人們可以使用它來找出事物的版本,儘管通常它是程序中各個源文件的版本,而不是整個程序的版本。(我自己將這個機制放入了我所有的 DOS 和 OS/2 版本 1 命令行實用程序,以及一個 16 位WHAT程序。)

今天仍然可以使用一些 OpenBSD …

$ 什麼 /bin/sh
/bin/sh
PD KSH v5.2.14 99/07 / 13.2
$

… 和 FreeBSD 二進製文件 …

% 什麼 /bin/tcsh
/bin/tcsh:
版權所有 (c) 1991 加州大學董事會。
%

……但 OpenBSD 和 FreeBSD 上的大多數其他程序都不是這種情況了,當然 FreeBSD 上的 Almquist shell 也不是……

% 什麼 /bin/sh
/bin/sh:
%

… 也沒有 Debian Almquist shell。

% 什麼 /bin/dash
/bin/破折號:
%

1988 年,Digital Research 向世界提出了工具採用/?選項來尋求選項幫助的想法,微軟在 1991 年將其從 DR-DOS 複製到其 MS-DOS 的 5.0 版中,並在 1992 年將 IBM 複製到 OS/2 中。這個想法,口口相傳,在 Fidonet 上和當時的電腦雜誌上被廣泛吹捧為一件非常好的事情,它作為一個--help選項進入了 GNU 編碼約定,並在其中添加了一個--version選項。但這對於 Unix 世界中的非 GNU 工具並不普遍,在 1989 年編寫 Almquist shell 時也並不普遍;因為 GNU 公約直到 1990 年代才出現。

Bourne Again shell(1989 年首次發布)現在支持--version. 這同樣被添加到 MirBSD Korn shell(最初的 Korn shell 於 1983 年首次發布,請記住)、TENEX C shell(1983)和 Z shell(1990),現在也都支持--version. 然而,這個機制並沒有被添加到 Almquist shell 中,即使是 Debian 人在幾十年後製作他們的Debian Almquist shell 時也是如此。

從 shell 本身來看,許多 shell(包括幾個 Korn 變體、Z shell、Bourne Again shell 和 TENEX C shell)都有一個*shellname*_VERSIONversionshell 變數,可以在 shell 腳本中訪問。同樣,Almquist shell 沒有。

進一步閱讀

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