私は基本的に私が作業したシステムの中に/bin/sh
実際の実行可能ファイルがないことに気づきました。 POSIXモードでは、常にdash
シンボリックリンクbash
などがあります。
なぜ?実際のオリジナルを使用すると、どのような欠点がありますか/bin/sh
? (速度?権限?)
答え1
機能が足りないようです。コマンド履歴もなく、素晴らしいリダイレクトもなく、コマンドライン編集もありません。このため、BSDはcsh
Cシェルを導入しました。もう一つの要因は本物のBourne Shellです。最近オープンソースとして公開。許可されていない場合は配布できません。これは無料のディストリビューションの範囲外であり、理念的に他のディストリビューションや* BSDには不適切です。
しかし、利用可能なコード今。見て、コンパイルし、試してみることができます。
答え2
あなたの質問の説明が正しくありません。 Solarisバージョン10まではいこれは伝統的な本物のBourneシェルを提供します/bin/sh
。これは、他のシェルで失敗する可能性がある古いスクリプトとの互換性を中断するためには行われません。しかし、それ以上の選択はかなり残念です。
すべてではありませんが、ほとんどの残りのUnixとUnixのようなバージョン(Solaris 11を含む)はPOSIX互換シェルを提供します。なぜなら、/bin/sh
POSIXはsh
以前の互換性のないBourneシェルではなくPOSIXシェルを起動するコマンドを必要とするからです。/bin/sh
一般的に:
ksh88
またはksh93
商用Unixの実装では- 修正済み(以前は
bash
そうでしたが)OS/X
zsh
ash
どちらかpdksh
の派生BSDs
bash
あるいは、dash
Gnu / Linuxディストリビューションでも可能です。
リンクである必要はありませんが、Gnu / Linux以外の多くのシステムで実際の実行可能ファイルになる可能性があります。
興味深いことに、あなたの質問に対する最も支持された答えにもかかわらず、ディストリビューション開発者が以前のBourneシェルとは異なるものをインストールするように促すことは、機能の欠如ではなく、/bin/sh
可能な限りPOSIXと互換性があることです。つまり、Unixオペレーティングシステムのように動作します。システム。 POSIXシェルが以前のBourneシェルよりも多くの機能を持っているという事実は、この標準準拠目標の副作用にすぎません。
bash
一部のシェルは呼び出されたときに異なる動作をします。sh
これは、その逆ではなく、ほとんどのシェルから機能を削除することに注意する価値があります。
答え3
私が知っている限り、元のBourneシェルはライセンスのためにBSDとGNUプロジェクトでは利用できません。
もともと、Unixには当時ライセンスがなく、GNUプロジェクトにはGPLに従ってシェルが必要だったので、bashを使用しました。
すべてのBSDの親であるBSD4の場合も同様です。 AT&Tの訴訟のために、彼らはBourneシェルを含む元のUnixのすべてのソースコードを書き直す必要がありました。
従来のBSDシリーズでは、Bourneシェルは4.3BSD-Renoまで利用可能でした(ただし、Net / 2以降の4.4BSDでは使用できなくなりました)。ライセンスの理由から、Kenneth Almquist(しばしばashと呼ばれる)のbourne互換svr4様shに置き換えられました。
FreeBSDからman sh
Thompsonシェルであるshコマンドは、AT&T UNIXバージョン1に登場しました。バージョン7 AT&T UNIXでは、shという名前を受け取ったBourneシェルに置き換えられました。
このshバージョンは、AT&T System Vリリース4のUNIX Bourneシェルに基づくBSDライセンスに基づいて1989年に書き直されました。
したがって、どちらのプロジェクトもBourneシェルを使用せずに真のオープンソースシェルを選択する必要がありました。