
Unixシェルは、 Unix系オペレーティングシステム用のコマンドラインユーザーインターフェースを提供するシェルです。Unixシェルは、対話的に、またはシェルスクリプトの作成に使用できるコマンド言語を提供します。[ 2 ]ユーザーは通常、ターミナルエミュレータを介してUnixシェル内で作業しますが、サーバーシステムでは、シリアルハードウェア接続またはセキュアシェルを介した直接アクセスが一般的です。Unixシェルの使用は一部のユーザーに人気がありますが、コマンドラインインターフェース(CLI)ではなく、 デスクトップLinuxディストリビューションやmacOSで提供されているようなウィンドウシステムのグラフィカルシェルを使用することを好むユーザーもいます。
ユーザーは複数のUnixシェルにアクセスできる場合があります。そのうちの1つは、ユーザーが対話的にログインした際にデフォルトで実行されるように設定されています。デフォルトの選択は通常、ユーザーのプロファイル(例えば、ローカルのpasswdファイル、またはNISやLDAPなどの分散設定システム)に保存されます。ユーザーは、デフォルトシェル内に ネストされた他のシェルを使用することもできます。
Unix シェルは、変数の定義と置換、コマンドの置換、ファイル名のワイルドカード、ストリームのパイプ、制御フロー構造(条件テストと反復)、作業ディレクトリのコンテキスト、ヒアドキュメントなど、多くの機能を提供します。
最初のUnixシェルは、ベル研究所のケン・トンプソンによって開発され、1971年から1975年にかけてUnixバージョン1から6に同梱されていたトンプソンシェル(sh )でした。 [ 3 ]現代の基準からすると原始的なものではありますが、パイプ、とを使用したシンプルな制御構造、ファイル名のGLOB bingなど、後のすべてのUnixシェルに共通する多くの基本機能を導入しました。現在は使用されていませんが、 Unixバージョン6など、一部の古いUNIXシステムでは今でも利用可能です。 ifgoto
これは、1965年にアメリカのソフトウェアエンジニア、グレンダ・シュローダーによって開発されたMulticsシェルをモデルにしています。シュローダーのMulticsシェル自体は、ルイ・プーザンがMulticsチームに提示したRUNCOMプログラムをモデルにしています。一部のUnix設定ファイル(「.bashrc」や「.vimrc」など)に付いている「rc」というサフィックスは、RUNCOM由来のUnixシェルの名残です。[ 1 ] [ 4 ]
PWBシェルまたはマッシーシェル( sh)は、トンプソンシェルの上位互換版で、ジョン・マッシーらによって拡張され、1975年から1977年頃にプログラマーズ・ワークベンチUNIXとともに配布された。特に大規模な共有コンピューティングセンターでシェルプログラミングを実用的にすることに重点を置いていた。シェル変数(環境変数の前身で、$PATHへと進化した検索パス機構を含む)、ユーザーが実行可能なシェルスクリプト、割り込み処理などが追加された。制御構造はif/gotoからif/then/else/endif、switch/breaksw/endsw、while/end/break/continueへと拡張された。シェルプログラミングが普及するにつれて、これらの外部コマンドはパフォーマンス向上のためにシェル自体に組み込まれた。
しかし、初期のUnixシェルの中で最も広く普及し、影響力のあったのはBourneシェルとCシェルでした。どちらのシェルも、多くの派生シェルや類似シェルのコーディングベースおよびモデルとして、また拡張機能を備えた多くのシェルのモデルとして利用されてきました。[ 5 ]
Bourneシェル( sh ) は、ベル研究所のStephen Bourneが開発した新しい Unix シェルです。[ 6 ] 1979 年に UNIX バージョン 7 のシェルとして配布され、ヒアドキュメント、コマンド置換、より汎用的な変数、より拡張された組み込み制御構造など、それ以降の Unix シェルすべてに共通すると考えられる残りの基本機能を導入しました。ブロックの終了を示す逆キーワードの使用など、この言語はALGOL 68の影響を受けています。[ 7 ] 伝統的に、Bourne シェルのプログラム名はshで、Unix ファイル システム階層におけるパスは/bin/shです。ただし、さまざまな改良や追加機能を備えた、互換性のある類似プログラムも多数提供されています。多くのシステムでは、 sh は次のいずれかへの シンボリック リンクまたはハード リンクです。
POSIX標準では、標準シェルはKornシェルの厳密なサブセットとして規定されています。ユーザーの観点から見ると、Bourneシェルは、その特徴的なデフォルトのコマンドラインプロンプト文字であるドル記号($)によって、起動時にすぐに認識されます。
Cシェル(csh )は、制御構造や式文法を含め、Cプログラミング言語をモデルにしています。カリフォルニア大学バークレー校の大学院生だったビル・ジョイによって開発され、BSD Unixとともに広く配布されました。[ 9 ]
Cシェルは、履歴や編集機構、エイリアス、ディレクトリスタック、チルダ表記、cdpath、ジョブ制御、パスハッシュなど、対話型作業のための多くの機能も導入しました。多くのシステムでは、cshはJoyのオリジナル版の改良版であるTENEX Cシェル(tcsh)へのシンボリックリンクまたはハードリンクになる場合があります。cshの対話型機能は他のほとんどのシェルにコピーされていますが、言語構造は広くコピーされていません。唯一類似しているのはNicole Hamiltonによって書かれたHamilton Cシェルで、 1988年にOS/2で初めて配布され、 1992年からWindowsでも配布されています。[ 10 ]
シェルは様々な状況で設定ファイルを読み込みます。これらのファイルは通常、シェルのコマンドを含んでおり、ロード時に実行されます。また、実行可能ファイルを見つけるために使われる重要な変数(例えば$PATHなど)や、シェルの動作や外観を制御する変数の設定にも使用されます。このセクションの表は、一般的なシェルの設定ファイルを示しています。[ 11 ]
| 設定ファイル | シュ | ksh | シェル | tcsh | バッシュ | zsh |
|---|---|---|---|---|---|---|
| /etc/.ログイン | ログイン | ログイン | ||||
| /etc/csh.cshrc | はい | はい | ||||
| /etc/csh.login | ログイン | ログイン | ||||
| ~/.tcshrc | はい | |||||
| ~/.cshrc | はい | はい[ a ] | ||||
| /etc/ksh.kshrc | 整数。 | |||||
| /etc/sh.shrc | int. [ b ] | |||||
| $ENV(通常は ~/.kshrc)[ 12 ] | 内線[ c ] [ d ] | 整数。 | int. [ e ] | |||
| ~/.ログイン | ログイン | ログイン | ||||
| ~/.ログアウト | ログイン | ログイン | ||||
| /etc/プロファイル | ログイン | ログイン | ログイン | ログイン[ f ] | ||
| ~/.プロファイル | ログイン | ログイン | ログイン[ g ] | ログイン[ f ] | ||
| ~/.bash_profile | ログイン[ g ] | |||||
| ~/.bash_ログイン | ログイン[ g ] | |||||
| ~/.bash_logout | ログイン | |||||
| ~/.bashrc | int.+n/ログイン | |||||
| /etc/zshenv | はい | |||||
| /etc/zprofile | ログイン | |||||
| /etc/zshrc | 整数。 | |||||
| /etc/zlogin | ログイン | |||||
| /etc/zlogout | ログイン | |||||
| ~/.zshenv | はい | |||||
| ~/.zprofile | ログイン | |||||
| ~/.zshrc | 整数。 | |||||
| ~/.zlogin | ログイン | |||||
| ~/.zlogout | ログイン |
説明:
Unixシェルの概念のバリエーションのうち、BourneシェルやCシェルから派生していないものには次のようなものがある。[ 15 ]
新しいスクリプト言語を発明する代わりに、Bourne シェルを修正し、必要に応じて組み込みコマンドを追加することで、フォーム入力システムを構築しました。