web-dev-qa-db-ja.com

なぜ真のBourne Shellを/ bin / shとして使用しないのですか?

基本的に、これまで使用したことのないシステムには、実際の実行可能ファイルとして/bin/shがないことがわかりました。これは常に、POSIXモードのdashbashなどのシンボリックリンクです。

どうして?真のオリジナル/bin/shを使用するデメリットは何ですか? (速度?ライセンス?)

55
strugee

私は機能がないと思います-コマンド履歴、派手なリダイレクト、コマンドライン編集はありません。 BSDは、これらの理由からCシェルcshを導入しました。もう1つの要因は、本物のBourne Shellが 最近、オープンソース形式で利用可能 であったことです。ライセンスを取得しない限り、配布することはできません。そのため、無料のディストリビューションでは対応できず、他のディストリビューションや* BSDではイデオロギー的に不快なものになりました。

しかし コードが利用可能 になりました。見て、コンパイルして、試してみることができます。

38
Bruce Ediger

あなたの質問の文は正しくありません。 Solarisバージョン10までisレガシーの真のBourne Shellを/bin/shとして提供します。これは、別のシェルで失敗する可能性のある古いスクリプトとの互換性を損なわないようにするために行われました。そうでなければ、この選択は非常にイライラしました。

Solaris 11を含むほとんどすべてのUnixおよびUnixのようなリリースは、POSIX互換シェルを/bin/shとして提供します。これは、POSIXが準拠しない従来のBourne Shellではなく、shコマンドを使用してPOSIX Shellを起動するためです。 /bin/shは通常:

  • 商用Unix実装ではksh88またはksh93
  • OS/Xbashの変更(以前はzshでしたが)
  • 他のashpdkshまたはBSDs派生物
  • Gnu/Linuxディストリビューションのbashまたはdash

これは必ずしもリンクである必要はありませんが、Gnu/Linux以外の多くのシステムで実際の実行可能ファイルにすることができます。

興味深いことに、あなたの質問に対する最も賛成の回答が何であるかにかかわらず、ディストリビューション開発者が/bin/shにレガシーBourne Shellとは異なるものをインストールする機能を欠いているわけではありませんが、可能な限りPOSIXに準拠することを望んでいます。つまり、UnixのようなOSのように動作します。 POSIXシェルが従来のBourneシェルよりも多くの機能を備えているという事実は、この標準準拠目標の副作用にすぎません。

また、一部のシェル、特にbashは、shと呼ばれると動作が異なり、これは主にシェルから機能を削除しますが、その逆ではありません。

23
jlliagre

私の知る限り、オリジナルのBourne Shellは、そのライセンスのため、BSDおよびGNUプロジェクトでは使用できませんでした。

当時、元のUnixにはライセンスがなく、GNUプロジェクトにはGPLに基づくシェルが必要だったため、bashを使用していました。

同じことが、すべてのBSDの親であるBSD4にも当てはまります。 AT&Tの訴訟のおかげで、Bourne Shellを含む元のUnixからのすべてのソースを書き直す必要がありました。

従来のBSDラインでは、Bourne Shellは4.3BSD-Renoまで出荷されていました(ただし、Net/2と次の4.4BSDではもうありません)。ライセンス上の理由から、ケネスアルムキスト(しばしばashと呼ばれる)によってボーン互換のsvr4のようなshに置き換えられました。

FreeBSDから man sh

ShコマンドのThompson Shellは、Version 1 AT&T UNIXで登場しました。バージョン7のAT&T UNIXでは、shという名前を継承したBourne Shellに置き換えられました。

このバージョンのshは、AT&T System Vリリース4 UNIXのBourne Shellの後、1989年にBSDライセンスの下で書き直されました。

そのため、どちらのプロジェクトもBourne Shellを使用せず、真のオープンソースシェルを採用することを余儀なくされました。

16
Raphael Ahrens

他にも問題がありました。 Bourne Shellは、malloc()の代わりにsbrk()を使用していたため、移植性が低くなりました。

Bourne ShellがOpenSolarisを介してOpenSourceになった後、hafwayポータブルバージョンを作成し、後にsbrk()をmalloc()でGeoff Collyerの助けを借りて置き換えました(同じ人がKorn Shell)。

Bourne Shellのポータブルバージョンを作成した最初の理由は、1982年から1984年の間に「bsh」用に作成した履歴エディターをBourne Shellでも使用できるようにしたかったからです。その間、私は「bsh」用に記述した独自の特性のほとんどをボーンシェルに移植しました。

これはとりわけ:

  • Cygwinを含むほぼすべての場所でコンパイルおよび動作します(bashより約2倍高速)
  • LRUリングバッファーを備えた履歴エディター
  • ビルトインTERMCAP
  • 高度なエイリアス(グローバルな永続エイリアス、ローカルエイリアスなど)と組み込みの「dosh」とともに、Bourne Shellは、パラメーター化可能なエイリアスを許可する唯一のBourne Shell同様の実装です。
  • Rawモードの履歴エディターで複雑なエイリアスを編集するためのサポート。
  • .sh。*変数を介して、exit(2)コードの32ビットすべてにアクセスします。
  • 6桁の分解能を持つ高度な自動タイミング
  • pushd/popd/dirs
  • 組み込みの「検索」
  • Stderrからのパイプ
  • パフォーマンスを向上させるためのvfork()の使用。
  • 最後に、SVr4 Bourne Shellから文書化されたすべてのバグを修正しました。サスペンドは常にジョブ制御モードで機能します。 ...

オンラインのmanページは次の場所にあります。 http://schillix.sourceforge.net/man/man1/bosh.1.html ソースはschilyツールボックスの一部です:

https://sourceforge.net/projects/schilytools/files/

私は以下を使用することをお勧めします: http://sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 または新しいバージョン。

追伸フィードバックに興味がある

8
schily

100% 下位互換性 を提供するシェルにリンクされています。元のシェルが持っているものは何も失うことはありませんが、その上にさらに多くの機能が追加されます。欠点はないので、なぜ新機能を見逃すのですか?これは、/bin/viが通常 vim にリンクされているのと同じ理由です。

4
JoelFan