シェル
シェル (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シェルとして、以下のものがある。
- Bourne Shell (sh)
- Almquist Shell (ash)
- Debian Almquist shell (dash)
- Bourne-Again shell (bash)
- Korn Shell (ksh)
- Z Shell (zsh)
- Almquist Shell (ash)
- C Shell (csh)
- TENEX C shell (tcsh)
- テンプレート:仮リンク - Microsoft Windows 向け
- Emacs shell (eshell)
- Friendly interactive shell (fish)
- テンプレート:仮リンク (rc) – Plan 9 from Bell Labs および Unix 向け
- テンプレート:仮リンク (Scheme Shell)
- テンプレート:仮リンク (sash)
- テンプレート:仮リンク
- Rhino shell
- rsh - 各種システムで使用可能なリモートシェル。一部システムでは Restricted shell を意味する。
- テンプレート:仮リンク - Perlベースの汎用シェル
- テンプレート:仮リンク - 対話型SQLクライアントとしてデータベースアクセスも可能なシェル
上述の一覧の一部は、DOSやWindowsでも利用可能であり、Unixとの相互運用性を様々なレベルで可能にする。主な例として、MKS Toolkit(sh, bash, ksh, csh, tclsh, rsh を利用可能)、UnxUtils、UWIN、Cygwin、テンプレート:仮リンク、Interix などがある。Windows Services For Unix はほとんどのバージョンで Korn shell と C shell を提供しており、Perlもコマンドラインとして利用できる。
Unixシェルは OS/2 や OpenVMS といった他のOSでの利用可能である。また、VMSのシェルであるテンプレート:仮リンクもDOS、Windows、OS/2、Unix系OSで利用可能となっている。
DOSや Windows NT のシェルもUnix系システムで利用可能となっているバージョンがある。
非Unixシェル
- テンプレート:仮リンク、4OS2、4NT – JP Software が開発販売していた(それぞれ)DOS、OS/2、Windows NT 用のシェル。後継の Take Command は互換性を保ちつつGUIを使用したシェルである。
- Amiga CLI/AmigaShell - AmigaOS本来のグラフィカルシェルである Workbench の代替となるコマンドライン方式のシェル
- BASIC-PLUS – RSTS/E
- CANDE MCS – バロースのOS MCP 上のシェル兼エディタ
- CCP (console command processor) – CP/Mのユーザインタフェース
- cmd.exe – OS/2、Windows CE、Windows NT におけるメインのシェル。名前は同じだが、OSによって異なる。
- COMMAND.COM – DOSと Windows 9x系のシェル。その後の Windows にも存在する。
- Commodore DOS Wedge – コモドール64の BASIC 2.0 を拡張したもので、主なディスク操作の省略表現を使用可能
- テンプレート:仮リンク – OpenVMS用標準シェル。DECの初期のOSが発祥
- DDT – DEC製PDP-10用デバッガだが、MITの Incompatible Timesharing System でコマンドシェルとして使用
- DROS – Java ME プラットフォームをベースとしたスマートフォン向けのDOS風シェル
- EFIシェル – オープンソースの Unified Extensible Firmware Interface コマンドシェル
- Google Shell – Google検索のオンラインのフロントエンドで、Unixシェル風に検索などが行える。
- iSeries QSHELL – IBM OS/400 でのUnix風シェル
- Macintosh Programmer's Workshop – かつての Mac OS でソフトウェア開発に使われていたコマンドライン環境
- Microsoft BASIC – かつての8ビットコンピュータでよく採用されていたオペレーティング環境
- REXX – IBMのスクリプト言語
- Singularity shell – Singularity用標準シェル
- Windows PowerShell – cmd.exe の後継のオブジェクト指向型シェル
- YouShell – YouOSのJavaScriptベースのコマンドプロセッサ
- 回復コンソール – Windows 2000、Windows XP、Windows 2003 にある機能
プログラミング言語のシェル
プログラミング言語の処理系には、シェルのような対話型コンポーネントを持つものがある。
- テンプレート:仮リンク - LISPが有名だが、他のプログラミング言語でも使われている。例えば Common Lisp 用のテンプレート:仮リンクがある。
- テンプレート:仮リンク – Java用シェル
- Firebug (Chromebug)[8] – JavaScript のシェル兼デバッガ環境(Firefoxプラグイン)
- GMMLCMD - テンプレート:仮リンク(Game Maker でのスクリプト言語)のシェル
- irb – Rubyの対話版
- JavaScript shell – この名前でJavaScriptの対話型実行を可能にするプログラムがいくつかある。[9]
- PHPsh – PHP用シェル
- Pythonの標準インタプリタはシェルモードでも起動可能
- Wish (GUI) と tclsh (CLI) - Tcl/Tk用シェル。他に tkcon もある。
- Windows Script Host
グラフィカルシェル
Microsoft Windows
現代の Microsoft Windows はシェルとして Windows shell を使用しており、その代表として Windows Explorer がある。Windows shell は、デスクトップ環境、スタートメニュー、タスクバーを含めた全体を意味し、Windows Explorer はファイル管理機能にアクセスするグラフィカルユーザインタフェースである。古いバージョン(Windows 3.x、95、NT)にはプログラムマネージャ (progman.exe) もグラフィカルシェルとして存在していた。
iTVmediaPlayerなどのデスクトップアプリケーションも、サードパーティのエンジンを使っているという意味でシェルと呼ばれることがある。同様に Windows Explorer のインタフェースに不満を持つ多くの個人や業者が機能や外観を変更するソフトウェアや代替のグラフィカルシェルを開発してきた。前者(外観改善)の好例として WindowBlinds がある。後者(代替)の例としては、LiteStep、SharpE、Emerge Desktop などがある。
相互運用プログラムや特定用途のソフトウェアにより、Windows上で後述のUnix系GUI環境を使用することもできる。また、Windows NT の一部バージョンにはOS/2サブシステムがあり、OS/2のプレゼンテーションマネージャと同等の環境を提供していた。
X Window System
グラフィカル (GUI) シェルは一般にウィンドウシステム上に構築される。X Window Systemの場合、ウィンドウマネージャのみを提供する場合と、ウィンドウマネージャを含むデスクトップ環境全体を提供する場合がある。
X Window System 環境(主にUnix系OS向け)として、以下のものがある。
- デスクトップ環境
- ウィンドウマネージャ
- デスクトップシェル
- 狭義のグラフィカルシェル
他のプラットフォーム
- Amigaの環境
- Ambient (MorphOS)
- Directory Opus
- ScalOS
- Wanderer (AROS)
- Workbench
- DOS Shell
- Finder (OS X)
- OS/2の環境
- Presentation Manager (OS/2 1.1 およびそれ以降、eComStation)
- ワークプレース・シェル (OS/2 2.0 およびそれ以降、eComStation)
脚注
関連項目
- POSIX
- 擬似端末
- バッチファイル
- MS-DOS Shell
- IEコンポーネントブラウザ - Internet Explorer shell とも
- シェルスクリプト
- Unixシェル