歴史 (研究によってではなく、ベル研究所の人々との付き合いにあまりにも多くの時間を費やすことによって得られたもの):
<オール>最初は (最初が Unix バージョン 7 であると考えれば) Bourne シェルでした。 Steve Bourne は、ユーザーの対話を制御するシェルがオペレーティング システムの特別な部分ではなく、ユーザー プログラムである可能性があることを最初に示しました。歴史的大躍進。シェル自体はスクリプティングには比較的クリーンでしたが、コマンドライン編集やジョブ制御はありませんでした。 Bourne の Introduction to the Unix Shell
編集 :同じく Multics の Ken Thompson と John Mashey の「前史」を無視しました。ボーンはこのすべての研究を認識していたと確信していますが (彼はベル研究所の同じ 1127 の研究室にいました)、ボーンの殻は決定的であり、以前の研究はスティーブ ボーンによる解釈を除いてほとんど影響を与えませんでした。たとえば、Ken は後に Plan 9 の C コンパイラを書き、Plan 9 に大きな影響を与えましたが、Tom Duff の Plan 9 シェルに関する論文 (rc) では Bourne のシェルについてのみ言及されており、Thompson のシェルについては言及されていません。
シェルは単なるユーザー プログラムなので、誰でも作成できます。バージョン 7 Unix がニュージャージーで作成されたとき、Berkeley Unix はカリフォルニアで作成されました。バークレー校の Bill Joy は csh
を書きました 、C シェル。ジョイはジョブ制御と履歴を追加し、後にコマンドライン編集を追加しましたが、ボーンの作業を認識していなかったため、彼の言語はトンプソン シェル (前の箇条書きで「先史時代」と見なした) に基づいていました。 Unix コミュニティはジョブ コントロールを愛していましたが、Bourne の言語も愛していました。 csh 言語に対するあまり良くない論争については、「有害と見なされる Csh プログラミング」を参照してください。しばらくの間、多くの人が csh
を使用していました ジョブ制御と履歴機能のためにインタラクティブに使用されましたが、Bourne の sh
を使用しました スクリプトを作成します。この状況は理想的とは言えませんでした。
編集 :csh
の年表について教えてくれた DigitalRoss に感謝します .私は、BSD を「バークレーの異端」と呼ぶ人々から教育を受けたので、そこには事実がほとんどありませんでした。
Bell Labs の Dave Korn は、Bourne シェルを見事に再設計して、Korn シェル (ksh) を作成しました。 Bourne シェル sh
との完全な下位互換性がありました しかし、計り知れないほどの改善をもたらしました。 ksh
POSIX 標準の基礎となり、Sun ソフトウェアの標準として出荷されました。 (Bill Joy が Sun の設立を手伝うために Berkeley を離れ、Sun の主要なソフトウェア担当者の 1 人だったにもかかわらずです。)
Bell Labs と AT&T は愚かにも ksh
の作成に失敗しました オープンソース。 ksh88
広く使用されていますが、情報源を持つことは合法ではありません。一部の人々は中毒になり、デジタル犯罪者になります.
編集 :これは本当に愚かでしたか?わかりにくい。バークレーはすでに Unix を無償提供しており、他の企業もすぐにそれに続くことになりましたが、これはまだ大企業が Unix に課金することを信じていた時代でした。しかし、結果:AT&T Unix は、何度もさまざまな関係者に売却された後、死んでしまいました。 BSD とその派生物は健在ですが、「Linux」や「GNU」と呼ばれる新興企業は、かつてベル研究所に属していたマインドシェアの大きな部分を占めています。
Free Software Foundation は、POSIX シェルのゼロからの実装から「クリーンルーム」を行い、当時の Dave Korn のアイデアをすべて取り入れ、さらに通常の FSF スタイルで、プログラム補完などの独自の新機能を追加します。彼らはそれを「Bourne again」シェル、または bash
と呼んでいます .
1990 年代半ばに AT&T が ksh93
をオープンソース化 、しかし、それまでに広く採用するには遅すぎます。ライセンス契約は奇妙に非標準的です。 bash
と ksh
発散、および ksh
歴史におけるその位置に見合った市場シェアを達成することは決してありません.
レッスン:
-
最初に市場に出回る適切な製品 (sh)
-
人々は新しい機能 (ジョブ制御、コマンド補完) を気に入っていますが、古いスクリプトが機能し続けるとさらに気に入ってしまいます。
-
編集 :工学部の教授は歴史を科学史家に残すべきです :-)
Bash には、2 つのまったく異なる機能があります。
<オール>
立派な殻です。これは、いくつかのクールな csh
を統合する 2 つのシェル (もう 1 つは zsh) の 1 つです。 !
のような機能 posix 構文への履歴置換。配列を含む多くの拡張機能があります。
FSF/GNU シェルです。オープンソースの世界では、これがある種の名声を与えています。
また、常にデフォルトであるとは限らないことも付け加えておきます。 ash
bash
の間、 /bin/sh としてよく使用されます ash
の対話型シェルの可能性があります 「コマンドファイルを実行するだけ」のシェルです。これは ash
のためです は小さくて高速で、posix 機能が含まれているため、適切なサブセットです。 ash
の使用 対話型シェルには問題がある場合があるためです。たとえば、NetBSD では、すべての機能が組み込まれているため、問題なく動作します。 bash
に対して、それは一種の 1 つのシェルです。 社外パッケージです。しかし、Linux ash
では 通常、非インタラクティブと見なされるため、履歴なしでコンパイルし、(重要な)行編集なしで、それらの巨大な gnu configure
を実行するために使用されるという理論に基づいてコンパイルします
2 つの貝殻の物語
シェルの本当の歴史
更新: シェルが Web 上のあちこちにコピーされたという不正確な歴史があり、人々は当然のことながらそれを信じています。正確なバージョンを提供し、それを裏付けるためにいくつかのリンクを提供するように努めます。
<オール><, >, >>, |, &
のすべての基本がありました 、しかしそれは単純な goto
でした 標準入力をシークする外部プログラムを介して構文を制御します。当時、複雑なシェル スクリプトはありませんでした。後のシェルは、別の fd でコマンド入力を開きます。今日では単純に見えるかもしれませんが、1970 年代のホラー映画ではコンピューティングは地球上で最高のものでした。信じられないかもしれませんが、この古代の貝殻には独自の Twitter ストリームがあり、もちろんホームページもあります。csh
でした 、書かれています (vi
のように) ) UCB の Bill Joy 著。これは GNU readline と NetBSD editline の前のことなので、 !
で履歴を作成するのは完全に合理的だと思われたに違いありません。 構文。 Csh は、今日のシェル機能のほとんどを追加しましたが、csh 構文を使用します。 csh は構文を変更していません 、無償またはその他の方法で。実際には Thompson シェルと下位互換性があり、もともと TS ソース コードが含まれていました。osh
そして csh
しばらく人気を維持。インターネットはなく、ライセンスされた SW でした。そのため、その環境では、Stephen Bourne が Joy のシェルについて知らなかった可能性があり、Joy が Bourne について知らなかったことは確かです。 UCB が VAX と今では忘れ去られた Unix/32V のプレリリースを入手したときに、2 つのシェルが最初に出会った可能性があります。 Bill がメモリ割り当てについて不平を言っていたのを覚えています。 両方のシェルが V6 シェルと下位互換性があることに注意してください 、彼らは単に構文をさまざまな方向に拡張しました。 ksh
を追加しました。 .最終的に、csh
にはソース コードがある程度利用可能でしたが、AT&T とカリフォルニア大学の間の訴訟で拘束されました。それでも、これらは BSD Unix の全盛期でした。50,000 ドルの料金を払える洗練された企業は、AT&T ライセンスを購入して 4.x BSD ディストリビューションをインストールし、大学はそれを無料で入手しました。csh
で行ったのと同じ数 構文は Bourne シェル構文と同様であり、2 つをマージしたものもあります。少なくとも tcsh
ありました 、 zsh
、 bash
、および ash
. Bourne 構文は「公式」であり、AT&T のリリースの一部でしたが、当時は BSD が非常に重要であり、Sun (最初は BSD) は世界が遭遇するかなりの量の Unix SW を配布しました。@DigitalRoss の発言に追加する
- Bash は posix-sh の完全なスーパーセットの代替品であり、/bin/sh として呼び出された場合でも posix-sh を完全にエミュレートします。 Posix-sh は、共通分母シェルとしての商用 UNIX システムの「標準」でした。つまり、そこから始まり、その上に構築されるものは、多くのことから始まります。