Bourne Shellとは何ですか?
Bourneシェルは、Unix®およびLINUX®オペレーティングシステムで実行される小さなプログラムで、システムでプログラムを実行するためのインターフェイスを提供します。 ユーザーにグラフィカルユーザーインターフェイス(GUI)を提供しないため、コマンドラインインターフェイスまたはコマンドインタープリターと呼ばれることがよくあります。 実行されるコマンドおよび必要なパラメーターは、シェルに入力されます。 Bourneシェルはスクリプト言語でもあるため、ユーザーは単一のコマンドで複数のプログラムを介してデータを処理できるスクリプトファイルを作成および実行できます。 Unix®のようなシステムでは、プログラムは単に「sh」として知られています。
Unix®システム用のこのような最初のシェルは、Thompsonシェルと呼ばれ、Unix®オペレーティングシステムの最初の作成者の1人であるKen Thompsonによって作成されました。 Thompsonシェルはコマンドの解釈に限定されており、外部操作として多くの追加機能を実行する必要がありました。 その後、Stephen BourneはThompsonシェルに代わるBourneシェルを作成し、シェル自体とシェルのスクリプト言語に多くの新機能を追加しました。
実際には、Bourneシェルは最初からスクリプト言語として計画されていました。 Unix®バージョン7のコマンドラインインターフェイスでしたが、ユーザーがコマンドをリンクしてデータを処理するシェルスクリプトを開発する可能性も開かれました。 このプログラミングを使用することにより、ユーザーは既知または未知のデータを入力または出力からキャプチャするための変数を設定し、制御フローと呼ばれる手法を介してスクリプト内の条件ステートメントを使用してそのデータの処理を操作できます。
これは、信号処理と呼ばれる機能を実装する最初のシェルでもありました。 Bourneシェルを介して、ユーザーは特定の種類の信号を既にコンピューターで実行されているプロセスに送信し、そのプロセスに別の処理を行うように指示できます。 これらの多くは、実行中のプロセスを停止し、デバッグに使用できる何らかの出力を生成する方法ですが、プロセスを一時的に停止したり、再開したりするための他の方法もあります。
ファイル記述子を直接制御する機能は、Bourneシェルの最初の機能でした。 Unix®ライクシステムでは、実行中のすべてのプログラムに、開いているファイルのファイル記述子をリストするテーブルがあります。 これには、単純なテキストファイルからディレクトリまで、またはプロセスが相互にデータを共有するために使用する通信ソケットまで、あらゆるものを含めることができます。 ユーザーがシステム上のファイル記述子を制御できるようにするために、コンピューター上の事実上すべての入出力の前例のない制御が可能になりました。
もちろん、Bourneシェルはこのような追加機能をユーザーに提供しましたが、プロセスを対話的に制御したり、コマンドエイリアスを確立したり、履歴を保持したりする機能はありませんでした。 しかし、その後、長年にわたって考案された最も有用なシェル機能を採用し、それらを新しいシェルにロールアップした多くの子孫が出現し始めました。 一般的な例の1つは、多くのLINUX®システムで一般的なBourne-again shell(Bash)です。 その結果、これらの子孫の多くは通常のBourneシェルスクリプトを完全に実行でき、Unix®に似たすべてのシステムに何らかの方法で元のBourneシェルを実装できます。 多くのLINUX®システムでは、これは単に「sh」から「bash」へのリンクまたはその他の有能な子孫です。