Bourne Shell

Bourne shell
作者 スティーブン・ボーン
初版 1977年
対応OS UNIX
種別 Unixシェル
テンプレートを表示

Bourne Shell(ボーンシェル)は、1977年にAT&Tベル研究所のスティーブン・ボーンが開発したUNIX用のコマンドラインインタプリタ兼スクリプト言語である。

Unix Version 7の標準シェルとして普及し、コマンド実行やファイル操作、処理の自動化に利用された。パイプや入出力リダイレクト、制御構造を備える点を特徴とし、その設計は後の多くのUnixシェルの基礎となった。

起源

Bourne shellは、Thompson shellおよびその改良版であるMashey shell(英語版)を置き換える目的で設計された。両者と同様にコマンド名は sh である。Version 7 Unixの構成要素として1977年に大学や研究機関へ配布され、以後Unixシステムにおける標準的なシェルとして広く普及した。

当初の設計目標には、以下の事柄が含まれていた。

機能と特徴

UNIX Version 7 での Bourne Shell の機能と特徴を以下に挙げる:

また、Bourne Shell はエラーメッセージのために 2番のファイル記述子を使うという規定を最初に採用したプログラムでもある。これにより、エラーメッセージをデータと分離してスクリプトで制御することが容易になった。

スティーブン・ボーンは自身がケンブリッジ大学で関わっていた ALGOL 68C コンパイラのいくつかの特徴をこのシェルに取り込んだ。例えば、"if ~ then ~ else ~ fi"、"case ~ in ~ out ~ esac"、"for ~ while ~ do ~ od" といった構文である。さらに Version 7 のシェルはC言語で記述されているが、ボーンはそのソースコードをALGOL68風にするためにいくつかのマクロを使っている。このマクロは、IOCCCが開催される元の1つとなった(他に、4.2BSDの finger コマンドも元になっている)。

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

数年の内に AT&T は Bourne Shell を強化した。各バージョンは対応する AT&T UNIX のバージョン名で呼ばれる(主なバージョンは Version 7、SystemIII、SVR2、SVR3、SVR4)。というのも、シェルはバージョン番号が付与されていないからでもあり、区別するには実際に機能をテストしてみる必要があった。

1979年以降のバージョンの Bourne shell の機能(や特徴)を以下に示す。

サンがOpenSolarisの中の Bourne Shell の派生版をオープンソースとしてリリースすると、他のフリーなUNIX系OS向けにこれを移植するHeirloomプロジェクトが開始され、利用可能となっている。Solaris や SVR4 の Bourne shell はオリジナルの ALGOL 68 風のソースコードではない。

批判

Bourne shell は、C Shell と比べて次のような欠点があると批判されてきた。

後継

Bourne shell ではなく Thompson shell から派生した C Shell (csh) は 4.1BSD で配布され、BSDカーネルの「ジョブ制御」機能を導入した。ジョブ制御は対話的にプログラムを止めたり、後でそれを再開させる機能である。C Shell がコマンドインタプリタとして人気になったのはこの機能があったためである。また C Shell は C言語風の文法を採用したことにより Bourne Shell と互換性がなくなってしまった。なお、ジョブ制御機能は後に Bourne shell にも導入され、その後継シェルの多くにも採用されている。

後にデビッド・コーンが開発した KornShell (ksh) は、Bourne Shell と C Shell の中間のようなもので、文法はほぼ Bourne Shell と同一で、ジョブ制御機能を C Shell から取り入れた。当初の KornShell (ksh88)の機能はPOSIXにおけるシェル標準の基盤となっている。その後、ksh93 が 2000年にオープンソース化され、いくつかのLinuxディストリビューションで使われている。ksh88 のクローン pdksh もあり、OpenBSDのデフォルトシェルとなっている。

Bash (Bourne Again Shell)は、その名が示す通り Bourne Shell を基本として C Shell や KornShell の機能を取り入れ、GNUプロジェクトの一部として開発された。macOS、Cygwin、多くのLinuxディストリビューションでデフォルトシェルとなっている。

rcは、ベル研究所のトム・ダフ(英語版)が Version 10 Unix(英語版) での sh の後継として開発した。Plan 9 from Bell Labs ではデフォルトシェルとされている。Plan 9 from User Space(英語版) の一部としてUNIXにも移植されたことがある。

かつてCSRGのBSDリリースでも使われた Bourne Shell には著作権問題がまとわりついていた。そこで Kenneth Almquist が Almquist Shell とも呼ばれる Bourne Shell のクローンを開発した。これはBSDライセンスで提供されていて、現在もBSD系でメモリ容量が小さい場合などに使われている。Linux にも移植され Debian Almquist shell または dash と呼ばれている。メモリ使用量が小さいため、シェルスクリプトの実行が bash よりも高速という特徴がある。

POSIX規格で規定されるUnix系システムでは、Bourne Shell後継のPOSIX準拠のシェルに置き換わっており、POSIXに準拠していないBourne Shellはすでに使われていない。/bin/shはかつてはBourne Shellだったが、現在はPOSIXシェルへのシンボリックリンクかハードリンクになっている(たとえばDebianではdash、RHELではbash)。

利用

Bourne shell は全ての商用UNIXシステムで標準とされているが、BSD系のシステムには C Shell で書かれたスクリプトが多数存在する。Bourne shell のスクリプトは GNU/Linux や他のUnix系システム上の bash や dash でもほとんど実行可能である。

多くのLinuxシステムで、/bin/sh はbashへのハードリンクまたはシンボリックリンクとなっている。しかしUbuntuなどのLinuxシステムでは効率がよいことから /bin/sh を dash へのリンクとしている。

影響

ブライアン・カーニハンとロブ・パイクによる『UNIXプログラミング環境』の出版が Bourne Shell の人気を高めた。これはチュートリアル形式でプログラミング言語としてのシェルを紹介した最初の商業出版本である。

語録

誰も Bourne shell の文法がどうなっているかを本当には知らない。ソースコードを調べてみてもほとんど役に立たない。 — Tom Duff

参考文献

脚注

  1. ↑ "The A-Z of Programming Languages: Bourne shell, or sh" March 2009, Computerworld
  2. ↑ Bourne, Steve (1979年1月12日). “mac.h - Macros used by Bourne to structure C like Algol68C”. AT&T. 2006年9月9日閲覧。
  3. ↑ Landon Curt Noll, Simon Cooper, Peter Seebach and Leonid A. Broukhis (2004年). “The IOCCC FAQ - Q/A: How did the IOCCC get started?”. www.ioccc.org. 2006年9月9日閲覧。
  4. ↑ Bourne Shell release testing script from Sven Mascheck
  5. ↑ History of the Bourne Shell family
  6. ↑ An Introduction to the C shell by Bill Joy.
  7. ↑ Bezroukov, Nikolai (2009年8月15日). “Introduction to the Unix shell history”. 2010年9月29日閲覧。
  8. ↑ G.アンダーソン、P.アンダーソン 著、落合 浩一郎、大木敦雄 訳『UNIX C SHELL フィールドガイド』パーソナルメディア株式会社、1987年10月15日、117-134頁。ISBN 4-89362-029-0。
  9. ↑ Tom, Duff. “Rc — The Plan 9 Shell”. 2014年10月15日閲覧。

関連項目

外部リンク