回答:
歴史(研究ではなく、ベル研究所の人々との付き合いにあまりにも多くの時間を費やすことで得た)
最初は(最初がUnixバージョン7であると考えている場合)Bourneシェルでした。Steve Bourneは、ユーザーの対話を制御するシェルが、オペレーティングシステムの特別な部分ではなく、ユーザープログラムである可能性があることを初めて示しました。歴史的なブレークスルー。シェル自体はスクリプト作成には比較的きれいでしたが、コマンドライン編集やジョブ制御はありませんでした。BourneのUnixシェルの紹介は、今日の初心者ユーザーにとってはまだ有用です。
編集:私はケン・トンプソンとジョン・マシー、またMulticsの「先史時代」を無視しました。Bourneはこのすべての作業を知っていたはずです(彼は同じ研究所の1127、Bell Labsにありました)が、Bourneのシェルは決定的なものであり、Steve Bourneによって解釈される場合を除き、以前の作業にはほとんど影響がありませんでした。たとえば、Kenは後でPlan 9 Cコンパイラを作成し、Plan 9に非常に影響を与えましたが、Tom DuffのPlan 9シェル(rc)に関する論文には、ThompsonではなくBourneのシェルのみが記載されています。
シェルは単なるユーザープログラムなので、誰でも作成できます。バージョン7 Unixがニュージャージーで作成されたとき、バークレーUnixはカリフォルニアで作成されていました。BerkeleyのBill Joy csh
はCシェルを書きました。ジョイはジョブ制御と履歴を追加し、その後コマンドライン編集を行いましたが、ボーンの仕事を知らなかったため、彼の言語はトンプソンシェル(前の弾丸で「先史時代」と考えていました)に基づいていました。Unixコミュニティはジョブコントロールを愛していましたが、ボーンの言語も愛していました。csh言語に対する特に良いとは言えない論争については、「Cshプログラミングが有害と見なされる」を参照してください。しばらくの間、多くの人csh
がジョブ制御機能と履歴機能のためにインタラクティブに使用していましたが、Bourneを使用sh
してスクリプトを記述していました。この状況は理想的とは言えませんでした。
編集:私の年表をまっすぐにしてくれたDigitalRossに感謝しcsh
ます。私はBSDを「バークレーの異端」と呼んでいる人々から教育を受けたので、そこには事実がほとんどありませんでした。
Bell LabsのDave Kornは、Bourneシェルの見事なリエンジニアリングを行い、Kornシェル(ksh)を作成しました。Bourneシェルとの完全な下位互換性sh
がありましたが、非常に多くの改善が行われました。 ksh
POSIX標準の基礎となり、Sunソフトウェアとともに標準として出荷されました。(これはビルジョイがバークレーを離れてサンを見つけるのを助けたという事実にもかかわらず、彼らはソフトウェアの第一人者でした。)
Bell LabsとAT&Tは、ksh
オープンソースの作成に愚かに失敗します。ksh88
は広く使用されていますが、ソースを持つことは違法です。特定の人々は非常に中毒になり、デジタル犯罪者になります。
編集:これは本当に愚かでしたか?わかりにくい。バークレーはすでにUnixを配布しており、他の企業もすぐにそれに追随する予定でしたが、コーポレートマスターがUnixへの課金を信じていた時代でした。しかし、結果は次のとおりです。AT&T Unixは何度もさまざまな関係者に売却された後、死んでいます。BSDおよびその派生物は健在ですが、「Linux」および「GNU」と呼ばれるこれらの新興企業は、かつてBell Labsに属していた大きなシェアを持っています。
Free Software Foundationは、POSIXシェルのゼロからの実装を「クリーンルーム」で行い、Dave Kornのすべてのアイデアを現在のものとし、さらに通常のFSFスタイルで、プログラム可能な補完などの独自の新機能を追加します。彼らはそれを「Bourne again」シェル、またはと呼びますbash
。
1990年代半ばにAT&Tのオープンソースksh93
がリリースされましたが、それまでには広範に採用するには遅すぎました。ライセンス契約は奇妙なことに非標準です。 bash
そして、ksh
発散し、ksh
決しては、歴史の中でその場所での市場シェア見合うを実現しています。
教訓:
市場への最初の適切な製品が勝ちます(sh)。
人々は新機能(ジョブ制御、コマンド補完)を愛していますが、古いスクリプトが機能し続けると、さらにそれらを愛します。
編集:工学の教授は歴史を科学の歴史家に任せるべきだ:-)
Bashには、まったく異なる2つのことがあります。
それは素晴らしいシェルです。履歴置換csh
などのクールな機能の一部を!
posix構文に統合するのは、おそらく2つのシェルの1つ(もう1つはzsh)です。配列を含む多くの拡張機能があります。
これはFSF / GNUシェルです。オープンソースの世界では、これは一種のキャッシュを提供します。
また、常にデフォルトとは限らないことも付け加えてください。ash
多くの場合、/ bin / shとして使用されるためbash
、対話型のシェルである一方ash
で、「コマンドファイルを実行するだけ」のシェルになります。これは、ash
小さくて高速で、posix機能が含まれているため、適切なサブセットだからです。ash
対話型シェルとしての使用には問題がある場合があります。たとえば、NetBSDでは、すべての機能が組み込まれているため、うまく機能します。それは一種のシェルのようなものですbash
が、外部パッケージです。しかし、Linuxではash
通常、非対話型と見なされます。したがって、それらは履歴なしでコンパイルされ、それらの巨大なgnu configure
スクリプトを実行するためだけに使用されるという理論の(重要な)行編集なしでコンパイルされます。
シェルの本当の歴史
更新:シェルがWeb上の場所から場所へコピーされるという不正確な履歴があり、人々は当然のことながらそれを信じています。ここでは、正確なバージョンを提供し、それを実証するためのリンクをいくつか提供します。
<, >, >>, |, &
がありましgoto
たが、標準入力を求める外部プログラムを介した単純な制御構文がありました。複雑なシェルスクリプトはありませんでした。後のシェルは、別のfdでコマンド入力を開きます。今日は一見シンプルに見えるかもしれませんが、1970年代のコンピューティングであるホラー映画では、それは地球上で最高のものでした。信じられないかもしれませんが、この古代のシェルには今日独自のtwitterストリームがあり、もちろんホームページもあります。csh
、 UCBのビル・ジョイvi
によって (そうであったように)書かれました。これはGNU readlineおよびNetBSD editlineの前であったため、構文を使用して履歴を作成することは完全に合理的であるように思われました。Cshは、今日のシェル機能のほとんどを追加しましたが、csh構文を使用しました。cshは、構文を変更しませんでした(無償またはその他)。実際には、Thompsonシェルとの後方互換性があり、元々TSソースコードが含まれていました。!
osh
し、csh
いくつかの時間のために人気のある滞在を。インターネットがなく、SWがライセンスされていたため、その環境では、スティーブンボーンがジョイのシェルを知らず、ジョイがボーンを知らなかった可能性があります。UCBがVAXと、今では忘れられていたUnix / 32Vのプレリリースを入手したときに、2つのシェルが最初に出会った可能性があります。ビルがメモリ割り当てについて不満を言ったことを覚えています。両方のシェルは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が非常に重要であり、当初はBSDだったSunが世界で遭遇したかなりの量のUnix SWを配布しました。/bin
と/sbin
依存/usr
、壊れてやニーズが固定されるという。それらは、のライブラリにのみ依存する必要があり/lib
ます。login
PAM のみが必要です。動的ライブラリを必要とする「新しいAPI」はNSSです。「トレンド」?NetBSD 2.0は5年前に完全に動的に/bin
、/sbin
5年前にFreeBSD 5.2に、そしてLinux ...に切り替えました。これはディストリビューションによって異なりますが、それも長い間です。
unix.comの調査によると、kshよりもはるかに先ではありません。
/ bin / sh 83 8.96%
/ bin / csh 36 3.89%
/ bin / ksh 370 39.96%
/ bin / tcsh 36 3.89%
/ bin / bash 401 43.30%
'bash'は100% 'sh / ksh'と互換性があり、 'ksh'はPOSIXシェルであるためです。
したがって、POSIX準拠のシステムが必要で、Linuxを使用している場合は、bashを使用します。
商用UNIXを使用している場合、通常はデフォルトのシェルとしてkshを取得します(昔のshをそのまま使用することもあります)。何らかの理由で、Sunは依然としてデフォルトのflakey csh c-shellを使用しています。
利点は、移植性です。hp-uxまたはAIX用に記述された.shは、変更なしでlinux 'bash'として実行される可能性が高くなります。
ただ、混乱事項に、sh
コマンドは時々ちょうどシンボリック別のシェルプログラムへのリンク、などであるash
、bash
またはdash
。
Ubuntuはこれをにリンクしていましたbash
。これbash
は、準拠するBourneシェルスクリプトを実行するように設計されているためです。
しかし最近、Ubuntuはへのsh
リンクを持つようになりましたdash
。スクリプト(およびスクリプト)dash
を実行するように設計されていますが、bash
スクリプトsh
のみに使用されるように設計されているため、のインタラクティブな機能が欠けていますbash
。これにより、サイズが小さくなり、(おそらく)高速になります。