bash
私はほとんどの時間それを使っていましたが、今では別のシェルで遊び始めました。dash
バージョン番号を調べ始めましたが、一般的な方法(-v
または)は$version
機能しませんでした。これはGNUに特化しているので、これがうまくいかないことがわかります--version
。私はオンラインで検索し、パッケージ管理システムの助けを借りて、次の答えを見つけました。
ダッシュのバージョン番号をどうやって知ることができますか?(ユーザーはCentOSを使用しているため、Redhatパッケージ管理システムによって回答が異なります)
そして
Ubuntu binでダッシュシェルのバージョンを見つける方法は?(AskUbuntuサイトからのものなので、回答は高度なパッケージングツールによって異なります。)
dash
それでは、パッケージ管理システムに依存せずにバージョン番号を見つける方法はありますか?私はいつもソフトウェアバージョンを照会することが最も基本的な機能の1つと考えられてきたので、簡単な方法がなければ非常に驚くでしょう。これが本当なら、このデザインの哲学が何であるかについての説明を聞きたいです。dash
パッケージ管理システムに頼らずにバージョンを取得する簡単な方法や、これがなぜ受け入れられない答えなのかについての説得力のある説明(歴史的観点も大丈夫でしょう)を喜んで受け入れます。
答え1
私はいつもソフトウェアバージョンを検索することが最も基本的な機能の1つだと思います。
しかし、実際にはそうではありません。これは良い考えであり、私たちはそれを学ぶべきです。
数年前、カーネル、パッケージマネージャ、パッケージリポジトリはありませんでした。私たちはオペレーティングシステム。 それバージョンがあり、暗黙的にオペレーティングシステムのすべてのコンポーネントプログラムがオペレーティングシステムのバージョンに関連付けられています。これはBSDとPC-DOSの両方に当てはまります。
what
1980年代初頭、AT&Tの世界では、ソース管理システムを介してプログラムのアイデアを提供し、バージョン文字列をバイナリに含めました。しばらく人々はそれを使って物事のバージョンを見つけることができましたが、通常はプログラム全体ではなく、プログラム内に個々のソースファイルバージョンがありました。 (私はこのメカニズムを16ビットプログラムを持つDOSとOS / 2用のすべてのバージョン1のコマンドラインユーティリティに入れましたWHAT
。)
今日、いくつかのOpenBSDを使用することはまだ可能です...
$何/空/sh /bin/sh PD KSH v5.2.14 99/07/13.2 $…そしてFreeBSDバイナリ…
%何/bin/tcsh /bin/tcsh: 著作権(c)1991カリフォルニア大学リージョン。 %...しかし、OpenBSDとFreeBSDの他のほとんどのプログラムではもはやそうではなく、確かにFreeBSDのAlmquistシェルではそうではありません...
%何/空/sh /bin/sh: %...Debian Almquist シェルも使用しません。
%何/空/ダッシュ /ビン/ダッシュ: %
1988年、Digital Researchは、オプションの支援を求めるためにオプションを選択できるツールのアイデアを世界に紹介しました/?
。マイクロソフトは1991年にDR-DOSからMS-DOSバージョン5.0にコピーし、IBMは1992年にOSにコピーしました。 /2。口コミはFidonetと当時のコンピュータ雑誌に広く普及しており、これは非常に良いと見なされ、--help
オプションとしてGNUコーディングルールに含まれていました--version
。しかし、これはUnixの世界ではGNU以外のツールでは一般的ではなく、Almquistシェルが作成された1989年には確かに一般的ではありませんでした。なぜなら、GNU条約は1990年代まで存在しなかったからです。
Bourne Againシェル(1989年に初めてリリース)がサポートされます--version
。これはMirBSD Kornシェル(元のKornシェルは1983年に初めてリリースされました。覚えておいてください)、TENEX Cシェル(1983)、Zシェル(1990)の両方で現在サポートされています--version
。しかし、このメカニズムはDebianの人々が作っているにもかかわらず、まだAlmquistシェルに追加されていません。ディーン・アルムキスト数十年後の殻。
シェル自体内の多くのシェル(複数のKornバリアント、Zシェル、Bourne Againシェル、およびTENEX Cシェルを含む)には、シェルshellname_VERSION
スクリプト内からアクセスできる変数またはシェル変数があります。version
同様に、Almquistシェルはそうではありません。
追加読書
- マイクミラー(2014-10-06)。
DASH_VERSION
変数の提供を検討してください。。 Debian のバグ #764172. - https://unix.stackexchange.com/a/257764/5132
答え2
file
回避策として使用されます。
file $(which dash)
:
/usr/bin/dash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=812a16ad1517b3d714e7b3bdb5470b2c82eb25ff, for GNU/Linux 3.2.0, stripped