シェル

出典: フリー百科事典『ウィキペディア(Wikipedia)』
2013年12月29日 (日) 13:40時点におけるEmausBot (トーク)による版 (ボット: 言語間リンク 2 件をウィキデータ上の d:Q18109 に転記)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索
ファイル:Bash screenshot.png
Bashのスクリーンショット

シェル (shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。それだけではなく、この用語は非常にゆるやかに応用され、特定のコンポーネントの周辺に構築された任意のソフトウェアを含むこともある。例えば、ウェブブラウザ電子メールクライアントHTMLレンダリングエンジンの「シェル」といわれることがある。OSの内部(カーネル)とユーザーの間にある外殻であることから、このように呼ばれる。

概要

OSシェルは一般に、コマンドラインとグラフィカルの2つに分類される。コマンドラインシェルはOSのコマンドラインインタフェース (CLI) を提供し、Windows Shell[1][2][3] などのグラフィカルシェルはグラフィカルユーザインタフェース (GUI) を提供する。どちらにしてもシェルの主たる用途は、他のプログラムを起動することである。しかし、シェルはディレクトリの中身を見るなどの追加機能を備えていることが多い。なおGUI全体ではなく、プログラムの起動とディレクトリのビューという機能を備えたGUIプログラムのみをグラフィカルシェルと呼ぶこともある。

CLIベースのシェルとGUIベースのシェルのどちらが優れているかという議論はしばしば行われている。CLI支持派は、特定の操作(ファイル群の移動など)を行う際にGUIよりもCLIの方が早いと主張する。一方GUI支持派は、グラフィカルシェルの方がユーザビリティが高くシンプルだと主張する。実際にはユーザーの使い方によって最良の選択が決まってくる。サーバは専門の管理者がいてデータの転送や処理を行うことが多いため、CLIが最良の選択ということが多い。しかし画像や映像などのデータの開発や編集を行うコンピュータではGUIの方が適している。

シェルはUNIXで使用される呼称であり、より一般的にはコマンドインタプリタと呼ぶ。しかしUNIXの普及やMS-DOSなど他のOSでも使用されたことにより現在では一般的な名称となっている。ただし通常「シェル」と言った場合はPOSIX系のオペレーティングシステムにおけるシェルを指すことが多い。一方「コマンドインタプリタ」の名称で呼ばれる場合は単に「コマンドを解釈する者」の意であり、OSのユーザインタフェースとしての意味合いは失われていることが多い。

エキスパートシステムにおいては、特定用途の知識ベースを入れる前の「空の」エキスパートシステムをシェルと呼ぶ[4]

Unix系オペレーティングシステムではシェルがユーザプログラムとして実装されており、また好きなシェルを差し替えて使用することができる。

歴史

最初のUnixシェルケン・トンプソンが開発した sh (Thompson shell) である[5]。その手本になったのがMulticsのシェルで[6]、さらにその手本になったのがルイ・プザンCTSS向けに開発したRUNCOMというプログラムである[7]

事実上すべての現代のOSシェルは、対話モードとバッチモードで使用でき、後者はシェルスクリプトと呼ばれるファイルの名前を指定することでその中身を解釈実行する。バッチモードでは、制御構造、条件文、変数といったプログラミング言語的要素を利用できる。バッチモードでの必要に迫られてそういった機能を追加したシェルもあるが、もともと洗練されたプログラミング言語として設計されたシェルもある。逆に一部のプログラミング言語はシェルのような対話的利用が可能である。

シェルの機能

一般的なシェルの機能は以下のとおり(すべてのシェルが装備しているわけではない)。

  • プログラム名(プログラム出力)を指定してアプリケーションを起動する。
  • プログラムを終了する、フォアグラウンド・バックグラウンドを切り替える(ジョブコントロール)。
  • プログラムの出力をファイルに出力する(リダイレクト)、他のプログラムの入力とする(パイプ)。
  • プログラムの動作環境の設定に使用する環境変数、シェル変数の設定・参照。
  • 入力コマンドライン中の特別な記法で指定した部分をファイル名としてパターンマッチさせて展開する機能(ワイルドカードの展開)。
  • 入力履歴を呼び出す(コマンド入力ヒストリ)。
  • コマンドに別名をつける(エイリアス)。
  • 繰り返しコマンドを実行したり、条件に応じて実行させたりするための制御構造。
  • 入力時のファイル名などの補完機能
  • まとまった一連の入力をシェルスクリプトとして実行する。バッチ処理とも呼ばれる。

シェルスクリプト

テンプレート:Main シェルの特徴は、コマンドラインの指示のための変数や制御構造を持っており、ある種のプログラミング言語と呼べる。たとえば、複数のファイルに対する処理をBourne Shellでは以下のように記述できる。

このシェルスクリプトはカレントディレクトリー上の.txtという拡張子を持つファイルのバックアップを作る。

#!/bin/sh
for file in *.txt
do
    cp "$file" "$file.bak"
done

このような処理はコマンドラインとして入力することもできるが、ファイルに保存してシェルスクリプトとして実行することができる。

テキストベースのシェル

Unixシェル

テンプレート:Main 歴史上有名なものやよく使われているUnixシェルとして、以下のものがある。

上述の一覧の一部は、DOSやWindowsでも利用可能であり、Unixとの相互運用性を様々なレベルで可能にする。主な例として、MKS Toolkit(sh, bash, ksh, csh, tclsh, rsh を利用可能)、UnxUtilsUWINCygwinテンプレート:仮リンクInterix などがある。Windows Services For Unix はほとんどのバージョンで Korn shell と C shell を提供しており、Perlもコマンドラインとして利用できる。

Unixシェルは OS/2OpenVMS といった他のOSでの利用可能である。また、VMSのシェルであるテンプレート:仮リンクもDOS、Windows、OS/2、Unix系OSで利用可能となっている。

DOSや Windows NT のシェルもUnix系システムで利用可能となっているバージョンがある。

非Unixシェル

プログラミング言語のシェル

プログラミング言語の処理系には、シェルのような対話型コンポーネントを持つものがある。

グラフィカルシェル

Microsoft Windows

現代の Microsoft Windows はシェルとして Windows shell を使用しており、その代表として Windows Explorer がある。Windows shell は、デスクトップ環境、スタートメニュー、タスクバーを含めた全体を意味し、Windows Explorer はファイル管理機能にアクセスするグラフィカルユーザインタフェースである。古いバージョン(Windows 3.x、95、NT)にはプログラムマネージャ (progman.exe) もグラフィカルシェルとして存在していた。

iTVmediaPlayerなどのデスクトップアプリケーションも、サードパーティのエンジンを使っているという意味でシェルと呼ばれることがある。同様に Windows Explorer のインタフェースに不満を持つ多くの個人や業者が機能や外観を変更するソフトウェアや代替のグラフィカルシェルを開発してきた。前者(外観改善)の好例として WindowBlinds がある。後者(代替)の例としては、LiteStepSharpEEmerge Desktop などがある。

相互運用プログラムや特定用途のソフトウェアにより、Windows上で後述のUnix系GUI環境を使用することもできる。また、Windows NT の一部バージョンにはOS/2サブシステムがあり、OS/2のプレゼンテーションマネージャと同等の環境を提供していた。

X Window System

グラフィカル (GUI) シェルは一般にウィンドウシステム上に構築される。X Window Systemの場合、ウィンドウマネージャのみを提供する場合と、ウィンドウマネージャを含むデスクトップ環境全体を提供する場合がある。

X Window System 環境(主にUnix系OS向け)として、以下のものがある。

他のプラットフォーム

脚注

テンプレート:Reflist

関連項目

外部リンク

  • テンプレート:Cite journal
  • テンプレート:Cite book
  • テンプレート:Cite book
  • テンプレート:Cite book
  • テンプレート:Cite web
  • テンプレート:Cite web
  • テンプレート:Cite web
  • developer.mozilla.org/en/Setting_up_extension_development_environment
  • developer.mozilla.org/en/JavaScript_shells JavaScript shells