Unixのようなシステムに複数のシェルがあるのはなぜですか?


16

私はUnixの基礎を学び始めたばかりで、なぜUNIXのようなシステムにこんなに多くのシェルがあるのか​​疑問に思っています。本「Unix環境での高度なプログラミング」から:

シェルは、ユーザー入力を読み取ってコマンドを実行するコマンドラインインタープリターです。シェルへのユーザー入力は、通常、ターミナル(対話型シェル)から、またはファイル(シェルスクリプトと呼ばれます)から行われます。

そして、この本は、Bourne shell、Bourne-again shell、Cshellなどのようなシェルプログラムのリストを続けています。私の質問は、基本的に複数のシェルが必要な理由です。


4
さまざまな他の技術のための非常に多くの標準がある同じ理由が適用されます。 xkcd.com/927
ダン・ニーリー

1
同じ理由で、複数のプログラミング言語用のコンパイラー/インタープリター(1つの言語用の複数のコンパイラー)または複数のインターネットブラウザーを使用できます。
ミーシャアレフィエフ

6
あなたの質問は予想外です。「なぜ我々は、複数のシェルが必要なのでしょうか?」誰が私たちがいることを言った必要な複数のシェルを?あなたの本には、複数のシェルがあると書かれてます。それは同じことではありません。
ロブ

回答:


15

現代のUNIX環境で使用されるほとんどのシェルは、POSIX sh仕様に準拠することを目的としています。POSIX shは、元のKornシェル(ksh88)から派生しています。これは、以前のBourneシェルから派生していますが、POSIX shは、ksh88の機能の小さなサブセットのみを指定します。最小要件のみを実装するシェルには、最も些細なスクリプトを安全かつ合理的な方法で記述するために必要な多くの機能が欠けています。たとえば、ローカル変数とローカル配列は非標準の追加です。

したがって、最初の理由は、追加機能でシェルを拡張することです。さまざまなシェルが、さまざまなことに集中することを選択します。たとえば、Zshは高度なインタラクティブ機能に焦点を当て、ksh93(現在の「オリジナル」のkornシェル)は強力なプログラミング機能とパフォーマンスに焦点を当てています。Dashのような非常に最小限のシェルでさえ、ローカル変数のような非標準のエクストラを少なくともいくつか追加します。

追加機能が広く相互運用可能である場合はほとんどありません。拡張グロブ構文など、ksh88機能セットのほとんどは相互運用性がかなり高くなっていますが、非標準機能では保証はなく、移植性のある方法でそれらを使用するために何をしているのかを本当に知る必要があります。

2番目の理由はレガシーです。/ bin / shに古代の非標準の実装を使用する独自のUnixがまだたくさんあります。Solarisは最近まで、Bourneをデフォールトとして使用し、最新のものにアップグレードするのではなく、Heirloomシェルを維持することを選択しました。これらのシステムには通常、たとえば、PATH変数を変更したり、個々のスクリプト内のシバンを変更したりすることで、切り替えることができるさまざまなシェルが付属しています。

要約すると。多くの場合、デフォルトでは複数のシェルがあります。

  • 特別な機能、特に非ポータブルの追加機能を扱う場合。
  • メンテナンスされないことが多いレガシースクリプトを処理するため。
  • サイズ/パフォーマンス。組み込みシステムでは、多くの場合、mkshやbusybox shなどの小さなシェルが必要です。
  • ライセンスの理由。AT&T kshは2000年頃まで独自のソフトウェアでした。これは主に、ZshやBashなどのすべてのkshのようなクローンを生み出したものです。
  • その他の歴史的理由。今日ではあまり人気がありませんが、scshやesなど、言語の再設計に急進的な試みがあります。多くのシェルのプロセス置換機能は、元々rc(少し異なる構文を使用)、およびcshからのブレース展開に由来しています。異なるシェルには、通常、微妙な違いまたはそれほど微妙ではない違いを伴う、そのような機能のさまざまな組み合わせがあります。

2
localPOSIXまたはUnixではありませんが、Linux 標準(LSB)およびdebianポリシー標準で指定され、必須であることに注意してください。はのesフォローアップであることに注意してくださいrc
ステファンシャゼル

1
現在mkshはPublic Domain Bourne Shellとして生まれましたが、これもライセンス上の理由から書かれました。(これらの問題はまだ残っています。ライセンスと移植性とサイズは、Androidにmkshを含めるようGoogleを説得するのに役立つ3つの要因でした。)
ミラビロス14

19

人々は異なるニーズを持っているので、与えられた状況であなたのニーズに合った代替品を持っているのは良いことです。シェルはそれ自体が単なるツールであり、私の意見では他のものと交換できるはずです。それが、Microsoft Windowsが選択したものとは反対のUnix / Linuxの力です。

同様に...なぜそんなに多くのテキストエディタがあるのですか?ブラウザーが既にあるのに、なぜ新しいブラウザーを開発するのですか?なぜGNOME、KDE、Xfce、LXDE、E17などがあるのですか?


12
正確に。「なぜこれほど多くのウィンドウマネージャーがいるのか?」同様に。UNIXネイティブは反対の質問をするかもしれません:なぜCMD.EXEが1つだけなのですか?なぜWindowsはそれほど厳格でカスタマイズできないのですか?
ブルースエディガー

1
@BruceEdiger意味は、たった1つのcmd.exeですか?使用したい場合は、それに代わるものがあります。マイクロソフト自身でさえ、PowerShellを代替手段として持っています。
マルコム

3
COMMAND.COMDOSでさえも交換可能でした。ただし、他のアプリケーション(および他のユーザー)の前提のために、非常に脆弱なシステムに陥ることがよくあります。その結果、に代わる成功した選択肢はほとんどありませんCMD.EXE。1つはPowerShellであり、Microsoftがそれを支援しているという慣性があります。別の例としては、奇妙なbashことに、Cygwinコミュニティからのきちんとしたサポートがあり、MinGWの人々は言うまでもありません。ウィンドウマネージャーについては、Windowsには一度に1つしかありませんでしたが、Windows環境自体が進化するにつれて、いくつかの時間をかけてきました。
RBerteig

この回答の+1。だからこそ、AIX、HP-UX、Solaris、Tru64、IRIX、UnixWare、OS X、Linux、FreeBSD、NetBSD、OpenBSDなど、さまざまなUNIXフレーバーがあります。
トンガ14

4

短い答え

奇妙なライセンスの歴史のために、Unixを開発した企業はありません。ボランティアと企業の両方が参加したコミュニティプロセスでした。これらのエンティティは常にすべてのツールを共有しているわけではなかったため、別々のシェルが発生しました。これがどれほど非生産的であるかを理解するまでに、使用中のすべてのシェルを統合するには遅すぎました。代わりに、これらすべてのシェルが(理論的に)相互に互換性を持つようにするための作業が行われました。

長い答えは複雑であり、Unix自体の歴史と密接に関連しています。このページで単一の回答を保持する方法はありませんが、広く(誤って)文書化されています。Unixの歴史を扱っているWebや本を見て回ることで、より詳細で正確な答えを見つけることができます。


2

さまざまなWebブラウザーが存在するのと同じ理由で、さまざまなシェルが存在します。誰もが好みを持ち、一部のシェルには歴史的な荷物や勢いがあります。それぞれに異なる機能と特異性があります。


1

主に、歴史...

Bourneは(適切な)SysV Unixの一部として開発され、BSDは使用されましたcsh...その後、bashはBourneシェル(およびkshなどの改良バージョン)のオープンソースの代替として開発されました。BourneのようなシェルがPOSIX標準で採用されました。kshは準拠しており、bashは準拠できます。

シェルは好きcshtcsh(コマンド補完などが不足している)が、元のBourneシェルよりも対話的に使用する方がはるかに簡単ですスクリプティングのため恐ろしいです ...

Unixベースの組み込みシステムなどの一部の環境では、コマンド補完などの対話型機能よりもスクリプト機能、サイズ、速度が重要であり、シェルのさまざまなバリアントが使用される傾向があります。

移植性のあるスクリプトを作成するには、POSIX準拠のBourneバリアントを使用し、拡張機能を使用しないでください。


3
-1は、世界がSysVで始まったと考えているためです。Bourneシェルは SysVのがリリースされた6年前、1977年のUNIX V7にリリースされました。
ロブ

@Rob、/ 1977 / S 1979 /
ステファンChazelas

結構です... * nixの歴史はかなり複雑です... en.wikipedia.org/wiki/File:Unix_history-simple.svg
Gert van den Berg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.