KDE Plasma 5 セッションのzsh、bash、およびkshシェルウィンドウ
Unixシェル は、Unix系 システムにおけるコマンドライン シェル である。ユーザーインターフェースとして対話的に利用したり複数のコマンド並べたシェルスクリプト を実行する。
最も影響を与えたUnixシェルとしては、Bourne Shell と C Shell がある。Bourne Shell は単に sh と呼ばれ、AT&Tでスティーブン・ボーン が開発し、UNIXで広く普及していたコマンドラインインタプリタである。パイプ 、ヒアドキュメント 、コマンド置換 (英語版 ) 、変数 、条件式やループといった制御構造 、ワイルドカード によるファイル名指定などの機能が他の全てのUnixシェルに共通する機能の出発点となった。言語としては、ブロックの終りを逆から綴った (ファイル)キーワードで示すなど、ALGOL 68 に影響を受けている[ 1] 。
C Shell (csh) はビル・ジョイ がカリフォルニア大学バークレー校 の大学院生のときに開発した。C言語 をモデルとして制御構造や式の文法を設計している。対話型シェルとして、ヒストリ機能、編集機構、エイリアス、ディレクトリスタック、チルダ記法、cdpath、ジョブコントロール、パスハッシングといった機能を導入した。
これら2つのシェルがベースとなって、様々なシェルが派生していった。
概念
「シェル」を最も広い意味で捉えれば、コマンドを入力するためにユーザーが使用するプログラムといえる。Unix系OSでは、対話型セッションのためのコマンドラインインタフェースには様々な選択肢がある。ユーザーがシステムにログイン すると(GUI 環境でない場合は)シェルプログラムが自動的に実行開始する。このログインシェルはユーザー毎にカスタマイズできる。passwd
ファイルで起動するシェルプログラムを指定でき、passwd -e
コマンドまたは chsh (英語版 )
コマンドで変更することもできる。また、ユーザーは別のシェルプログラムを対話的に起動することもできる。
Unixシェルが登場した当時、このようなプログラムは珍しかった。対話型のコマンド言語 であると同時にスクリプト言語 としても使え、システムの制御ファシリティとしてOS自体もそのスクリプトを使用している。シェルの考え方はUNIX以外にも広まっていった。
ウィンドウシステム を持つシステムでは、ユーザーがシェルを直接使わないことも多い。Unix系OSでは、システムの立ち上げスクリプト群がシェルスクリプト で書かれており、ウィンドウシステムの起動もインターネット へのアクセスのためのプログラム起動もその他の様々な機能の起動もそのようなスクリプトで行う。
初期のシェル
Bourne Shell
Bourne Shell はスティーブン・ボーン がベル研究所 で開発し、1977年ごろ Version 7 Unix の一部として配布され、当時のデファクトスタンダード であった。Unix系OSには必ず Bourne Shell かその互換シェルが含まれていた。コマンドとしての名称は sh で、UNIXのファイル階層では一般に /bin/sh というパスにある。/bin/sh は Bourne Shell と互換性がある機能拡張されたシェルへのソフトリンク またはハードリンク である。POSIX では標準のシェル機能として KornShell のサブセットを指定しており、現在はPOSIXシェルに置き換わったためBourne Shellは使われていない。
C Shell
C Shell はビル・ジョイ がカリフォルニア大学バークレー校 でUnix系 OSの一系統の元となったBSD 向けに開発した。Version 6 Unix の Thompson shell をベースとしている。C言語 をモデルとして構文規則を設計した。対話型の端末 で使用することを第一に考えて設計されており、スクリプト言語 としてはあまり使われない。C Shell には様々な対話用コマンドがある。
分類
Bourne Shell 互換
C Shell 互換
その他
様々なシェルの一覧は www.freebsd.org にある。
歴史的シェル
主なUnixシェルの設定ファイル
シェルは様々な場面で設定ファイルを読み込むが、詳細はシェルの種類によって異なる。設定ファイルにはそのシェル向けのコマンド群が書かれており、ロードされると同時に実行される。実行ファイルの探索パスを指定する $PATH のような重要な変数を設定したり、シェルの振る舞いや見栄えを制御する変数を設定したりする。次の表は代表的なUnixシェルの設定ファイルについてまとめたものである。
sh
ksh
csh
tcsh
bash
zsh
/etc/.login
login
login
/etc/csh.cshrc
yes
yes
/etc/csh.login
login
login
~/.tcshrc
yes
~/.cshrc
yes
yes[ 注釈 1]
~/.login
login
login
~/.logout
login
login
/etc/profile
login
login
login
login
~/.profile
login
login
login[ 注釈 2]
login
~/.bash_profile
login[ 注釈 2]
~/.bash_login
login[ 注釈 2]
~/.bash_logout
login
~/.bashrc
int.+n/login
/etc/zshenv
yes
/etc/zprofile
login
/etc/zshrc
int.
/etc/zlogin
login
/etc/zlogout
login
~/.zshenv
yes
~/.zprofile
login
~/.zshrc
int.
~/.zlogin
login
~/.zlogout
login
凡例:
空白のマスは、そのシェルではそのファイルを全く読み込まないことを意味する。
"yes" - そのシェルの起動時に必ず読み込む。
"login" - そのシェルがログインシェルだった場合に読み込む。
"n/login" - そのシェルがログインシェルでなかった場合に起動時に読み込む。
"int." - 対話型のシェルとして起動した場合に読み込む。
脚注
注釈
^ ~/.tcshrc
が見つからない場合のみ
^ a b c 実際には ~/.bash_profile
、~/.bash_login
、~/.profile
の順で最初に読み取り可能なファイルだけを読み込む。sh
として呼び出されたときは ~/.profile
のみを読み込む。
出典
参考文献
Ellie Quigley (2001). “Introduction to UNIX shells”. Unix Shells by Example . Prentice Hall PTR. ISBN 013066538X — 各種シェルの歴史と使用法など
関連項目
外部リンク