ボーンシェル

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

ボーンシェル
バージョン7UNIX SIMHPDP11カーネルShell.png
バージョン7UnixでのBourneシェルの相互作用
原作者スティーブンボーン
開発者ベル研究所
初回リリース1979 ; 43年前 (1979
オペレーティング・システムUnix
タイプUnixシェル
ライセンス[議論中]

Bourneシェルsh)は、コンピューターオペレーティングシステム用のシェル コマンドラインインタープリターです。

Bourneシェルは、バージョン7UnixのデフォルトのシェルでしたUnixライクなシステムは、他のシェルがほとんどのユーザーによって使用されている場合でも、 引き続き(Bourneシェル、または互換性のあるシェルへのシンボリックリンクまたはハードリンクになります)。/bin/sh

BellLabsStephenBourneによって開発され、実行可能ファイルの名前が同じであるThompsonシェルの代わりになりました— 1979年に大学に配布されたバージョン7Unixリリースでリリースされました。対話型のコマンドインタープリターとして使用されますが、スクリプト言語としても使用され、構造化プログラムを作成するために一般的に考えられている機能のほとんどが含まれています。 sh

これは、 BrianKernighanRobPikeによるUnixプログラミング環境の出版で人気を博しました。これは、チュートリアル形式でプログラミング言語としてシェルを提示した最初の商業出版された本です。

歴史

バージョン7Unix:元のBourneシェルのマニュアルページSIMHを使用したPDP-11シミュレーション

起源

Bourneシェルの作業は1976年に最初に開始されました。[1]バージョン7Unixで最初に登場し[2] BourneシェルがMasheyシェルに取って代わりました。

シェルの主な目標のいくつかは次のとおりです。[3]

元のバージョンの機能

バージョン7UNIXBourneシェルの機能は次のとおりです。

  • スクリプトは、ファイル名を使用してコマンドとして呼び出すことができます
  • インタラクティブまたは非インタラクティブに使用できます
  • コマンドの同期実行と非同期実行の両方を許可します
  • 入力と出力のリダイレクトとパイプラインをサポートします
  • 組み込みコマンドのセットを提供します
  • フロー制御構造、見積もり機能、および関数を提供します。
  • タイプレス変数
  • ローカルおよびグローバル変数スコープを提供します
  • スクリプトは実行前にコンパイルする必要はありません
  • goto機能がないため、コードの再構築が必要になる場合があります
  • バッククォートを使用したコマンド置換`command`
  • <<ここでは、スクリプト内に入力テキストのブロックを埋め込むために使用するドキュメントを示します。
  • for ~ do ~ doneループ、特に$*引数をループするfor ~ in ~ do ~ doneためのループ、およびリストを反復するためのループ。
  • case ~ in ~ esac主に引数の解析を支援することを目的とした選択メカニズム
  • shキーワードパラメータとエクスポート可能な変数を使用して環境変数のサポートを提供しました。
  • 入力と出力を制御するための強力なプロビジョニングと、その式マッチング機能が含まれています。

Bourneシェルは、エラーメッセージにファイル記述子を使用するという規則を最初に備えたものでもあり、エラーメッセージ 2>データから分離することで、スクリプト作成中のプログラムによる制御を大幅に強化できます。

Stephen Bourneのコーディングスタイルは、ケンブリッジ大学で取り組んできたALGOL68Cコンパイラ[2]の経験に影響を受けました。プログラムが書かれたスタイルに加えて、BourneはALGOL 68の一部を再利用し、一般的なUnix Bourneシェル構文で「(の代わりに)句を使用しました。さらに、v7シェルはCで書かれていますが– Bourneいくつかのマクロ[4]を利用して、CソースコードにALGOL 68フレーバーを与えました。これらのマクロ( Unixバージョンで配布されているfingerコマンドとともに)if ~ then ~ elif ~ then ~ else ~ ficase ~ in ~ esacfor/while ~ do ~ oddoneod4.2BSD )は、 International Obfuscated C Code Contest(IOCCC )に影響を与えました。[5]

1979年以降に導入された機能

何年にもわたって、ボーンシェルはAT&Tで強化されました。したがって、さまざまなバリアントは、リリースされたそれぞれのAT&T Unixバージョンのように呼ばれます(いくつかの重要なバリアントは、Version7、SystemIII、SVR2、SVR3、SVR4です)。シェルはバージョン管理されていないため、シェルを識別する唯一の方法はその機能をテストすることでした。[6]

1979年以降のBourneシェルバージョンの機能は次のとおりです。[7]

  • 組み込みtestコマンド–システムIIIシェル(1981)
  • #コメント文字として–システムIIIシェル(1981)
  • パラメータ置換のコロン "$ {parameter:= word}" –システムIIIシェル(1981)
  • continue議論あり–システムIIIシェル(1981)
  • cat <<-EOFここにインデントされたドキュメントの場合–システムIIIシェル(1981)
  • 関数とreturn組み込み– SVR2シェル(1984)
  • ビルトインunset、、echotypeSVR2シェル(1984)
  • ソースコードde-ALGOL68-ized– SVR2シェル(1984)
  • モダン " $@" – SVR3シェル(1986)
  • ビルトインgetopts– SVR3シェル(1986)
  • クリーンアップされたパラメーター処理により、再帰的に呼び出し可能な関数が可能になります– SVR3シェル(1986)
  • 8ビットクリーン– SVR3シェル(1986)
  • ジョブ制御– SVR4シェル(1989)
  • マルチバイトサポート– SVR4シェル(1989)

バリアント

DMERTシェル

Duplex Multi-Environment Real-Time(DMERT )は、1970年代にイリノイ州ネイパービルのベル研究所インディアンヒルで開発されたハイブリッドタイムシェアリング/リアルタイムオペレーティングシステムで、1978年のBourneShellのスナップショットを使用しています。 22:39:57 "。[要出典] DMERTシェルは、電気通信業界でまだ使用されている3B21Dコンピューターで実行されます。[要出典]

Kornシェル

OpenBSD(デフォルトシェル)でのpdkshとの相互作用

元のBourneShellソースコードに基づいてDavidKornによって作成されたKornシェル(ksh)[8]は、BourneシェルとCシェルの中間の道でしたその構文は主にBourneシェルから引き出されましたが、そのジョブ制御機能はCシェルの機能に似ていました。オリジナルのKornシェル(導入年からksh88として知られている)の機能は、 POSIXシェル標準の基礎として使用されました。新しいバージョンのksh93は、2000年からオープンソースであり、一部のLinuxディストリビューションで使用されています。pdkshとして知られるksh88のクローンは、OpenBSDのデフォルトのシェルです。

シリーボーンシェル

JörgSchillingのSchily-Toolsには、3つのBourneShell派生物が含まれています。[9]

他のシェルとの関係

Cシェル

Cシェルの作者であるBillJoyは、Bourneシェルはインタラクティブな使用には不向きであると批判し[10]、StephenBourne自身がCシェルの優位性を認めたタスクです。しかし、Bourneは、彼のシェルはスクリプティングに優れており、どのUnixシステムでも利用可能であると述べ[11]TomChristiansenもCシェルがスクリプティングとプログラミングに不適切であると批判しました。[12]

Almquistシェル

歴史的なCSRGBSDリリースで使用されていたBourneShellを取り巻く著作権の問題により、Kenneth Almquistは、一部のBSDで現在使用されているBSDライセンスの下で利用可能なAlmquistシェルとして知られるBourneShellのクローンを開発しました。子孫およびメモリ不足の状況。Almquist ShellはLinuxに移植され、その移植はDebianAlmquistシェルまたはダッシュに名前が変更されました。このシェルは、対応するBashよりもメモリフットプリントが小さい標準(および最新の子孫ではPOSIX標準)スクリプトの高速実行を提供します。その使用は、bashismを明らかにする傾向があります-shで実行することを意図したスクリプトで行われたbash中心の仮定。 shsh

その他のシェル

使用法

Bourneシェルは、かつてはすべてのブランドのUnixシステムで標準でしたが、歴史的にBSDベースのシステムにはcshで記述された多くのスクリプトがありましたPOSIX 構文の基礎としてsh、Bourneシェルスクリプトは通常、 Linuxまたはその他のUnixライクなシステムでBashまたはdashを使用して実行できます。

も参照してください

参考文献

  1. ^ https://www.bsdcan.org/2015/schedule/events/612.en.html BSDCan2015のStephenBourne基調講演
  2. ^ a b McIlroy、MD(1987)。Research Unixリーダー:プログラマーマニュアル、1971年から1986年 (PDF)(テクニカルレポート)からの注釈付きの抜粋。CSTR。ベル研究所。139。
  3. ^ 「プログラミング言語のAZ:Bourneシェルまたはsh」computerworld.com.au2010年1月11日にオリジナルからアーカイブされました2009年3月6日取得
  4. ^ ボーン、スティーブ(1979年1月12日)。"mac.h –ボーンがAlgol68CのようなCを構造化するために使用するマクロ"AT&TCorporation 2006年9月9日取得
  5. ^ Landon Curt Noll ; サイモンクーパー; Peter Seebach&Leonid A. Broukhis(2004)。「IOCCCFAQ– Q / A:IOCCCはどのように始まったのですか?」ioccc.org 2006年9月9日取得
  6. ^ 「これは何の殻ですか」www.in-ulm.de
  7. ^ 「伝統的なボーンシェルファミリー/歴史と発展」www.in-ulm.de
  8. ^ Korn、David G.(1994年10月26日)、「ksh-拡張可能な高級言語」USENIX 1994超高級言語シンポジウムの議事録、USENIX Association 、 2015年2月5日取得、新しいスクリプト言語を発明する代わりに、 Bourneシェルを変更し、必要に応じて組み込みコマンドを追加して、フォーム入力システムを構築しました。
  9. ^ 「SchilyBourneShell-JörgSchillingによって維持されている最新の拡張されたPOSIX準拠のBourneShellソース」シリーツール
  10. ^ BillJoy よるCシェルの紹介[必要なページ]
  11. ^ Bourne、Stephen R.(1983年10月)。「Unixシェル」BYTEp。187 2015年1月30日取得
  12. ^ トムクリスチャンセン(1995年9月28日)。「有害と考えられるCshプログラミング」2014年2月17日取得

外部リンク