
私はちょうどUnixの基本を学び始めましたが、なぜUnixシリーズシステムにそんなに多くのシェルがあるのか疑問に思います。本からUnix環境の高度なプログラミング:
シェルは、ユーザー入力を読み取ってコマンドを実行するコマンドラインソルバーです。シェルへのユーザー入力は通常ターミナル(インタラクティブシェル)から来て、時にはファイル(シェルスクリプトと呼ばれる)から来ます。
書籍には、Bourne シェル、Bourne-again シェル、Cshell などのいくつかのシェルプログラムがリストされています。私の質問は基本的になぜ複数のシェルが必要なのですか?
答え1
人ごとにニーズが異なるため、特定の状況で自分のニーズに合った代替手段を持つことをお勧めします。私の考えでは、シェル自体は単なるツールなので、他のツールと交換できるはずです。これは、Microsoft Windowsオプションのパフォーマンスとは対照的に、Unix / Linuxのパフォーマンスです。
同様に…なぜそれほど多くのテキストエディタがありますか?すでにブラウザがありますが、なぜ人々は新しいブラウザを開発するのですか? GNOME、KDE、Xfce、LXDE、E17などがあるのはなぜですか?
答え2
最新のUNIX環境で使用されるほとんどのシェルは、POSIX sh仕様に準拠するように設計されています。 POSIX shは最初のBourneシェルから派生した元のKornシェル(ksh88)から派生しましたが、POSIX shはksh88機能の小さなサブセットのみを指定します。最小限しか実装していないシェルには、最もマイナーなスクリプトを除くすべてのスクリプトを安全で健全な方法で作成するために必要な多くの機能がありません。たとえば、ローカル変数と配列は非標準の追加項目です。
したがって、最初の理由は、アドインでシェルを拡張することです。他の殻は他のものに集中することを選択します。たとえば、Zshは高度な対話型機能に焦点を当てていますが、ksh93(現在の「オリジナル」kornシェル)は強力なプログラミング機能とパフォーマンスに焦点を当てています。 Dashなどの非常に小さなシェルにも、ローカル変数などの非標準のアドインが少なくともいくつか追加されます。
アドインが広範囲に相互運用されることはほとんどありません。ほとんどのksh88機能セットは、拡張されたglobbing構文など、かなり優れた相互運用性を持っていますが、非標準機能では保証できません。
第二の理由は遺産です。 / bin / shの古代の非標準実装を使用する独自のUnixがまだたくさんあります。最近まで、Solaris は Bourne をデフォルトのシェルとして使用し、最新のシェルにアップグレードする代わりに Heirloom シェルを維持することを選択しました。これらのシステムには、PATH変数を変更したり、単一のスクリプト内でshebangを変更するなど、切り替えることができるさまざまなシェルが付属していることがよくあります。
要約すると。複数のシェルがあり、通常はデフォルトです。
- アドイン、特に携帯できない追加アイテムを処理する場合。
- 多くの場合、管理されていない従来のスクリプトを処理します。
- サイズ/性能。組み込みシステムには、mkshやbusybox shなどの小さなシェルが必要なことがよくあります。
- ライセンス理由。 AT&T kshは2000年頃まで独占ソフトウェアでした。これは主にZshやBashなどのすべてのksh様クローンを生成した。
- 他の歴史的理由。今ではあまり人気がありませんが、scshやesなどの言語を再設計しようとしました。多くのシェルのプロセス置換機能はもともとrcから来て(構文はわずかに異なる)、中括弧拡張はcshから来ました。シェルごとに利用可能な機能の組み合わせが異なり、しばしばわずかに微妙なまたはあまり微妙ではない違いがあります。
答え3
短い答え
奇妙なライセンス記録のためにUnixを開発した単一の企業はありません。これはボランティアと企業の両方が参加するコミュニティプロセスです。これらのエンティティは常にすべてのツールを共有していないため、別々のシェルが登場しました。これがどれほど非生産的かを理解したとき、使用中のすべてのシェルを統合するには遅すぎます。代わりに、私たちはこれらのすべてのシェルが(理論的に)保証されるように仕事をしました。互いに互換性。
答えは複雑で、Unix自体の歴史と密接に関連しています。このページに単一の回答がある可能性はありませんが、広範囲に(誤って)文書化されています。 Unixの歴史に関するインターネットと本を検索してみると、より詳細で正確な答えを見つけることができるだろう。
答え4
主に歴史...
Bourneは(独占)SysV Unixの一部として開発されましたが、BSDはcsh
...後でbashはBourneシェル(およびkshなどの改良版)のオープンソース代替として開発されました。 POSIX 標準は Bourne と同様のシェルを使用します。 kshは互換性があり、bashも互換性があります。
シェルは元のBourneシェルに似ており(コマンドの完成などが不足している)、元のcsh
Bourneシェルよりも対話的に使いやすいですが、tcsh
台本を打つのはひどいです。...
Unixベースの組み込みシステムなどの一部の環境では、コマンドの完成などの対話型機能よりもスクリプト機能、サイズ、および速度がより重要であり、さまざまなシェルバリアントが使用される傾向があります。
移植可能なスクリプトでは、BourneのPOSIX準拠のバリエーションを使用し、拡張を避ける必要があります。