Unixシェル

Mac OS X Leopard [ 1 ]デスクトップ上の tcsh および sh シェルウィンドウ

Unixシェルは、 Unix系オペレーティングシステム用のコマンドラインユーザーインターフェースを提供するシェルです。Unixシェルは、対話的に、またはシェルスクリプトの作成に使用できるコマンド言語を提供します。[ 2 ]ユーザーは通常、ターミナルエミュレータを介してUnixシェル内で作業しますが、サーバーシステムでは、シリアルハードウェア接続またはセキュアシェルを介した直接アクセスが一般的です。Unixシェルの使用は一部のユーザーに人気がありますが、コマンドラインインターフェース(CLI)ではなく、 デスクトップLinuxディストリビューションmacOSで提供されているようなウィンドウシステムグラフィカルシェルを使用することを好むユーザーもいます。

ユーザーは複数のUnixシェルにアクセスできる場合があります。そのうちの1つは、ユーザーが対話的にログインした際にデフォルトで実行されるように設定されています。デフォルトの選択は通常、ユーザーのプロファイル(例えば、ローカルのpasswdファイル、またはNISLDAPなどの分散設定システム)に保存されます。ユーザーは、デフォルトシェル内に ネストされた他のシェルを使用することもできます。

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シェル

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.shrcint. [ b ]
$ENV(通常は ~/.kshrc[ 12 ]内線[ c ] [ d ]整数。 int. [ e ]
~/.ログインログイン ログイン
~/.ログアウトログイン ログイン
/etc/プロファイルログイン ログイン ログイン ログイン[ f ]
~/.プロファイルログイン ログイン ログイン[ g ]ログイン[ f ]
~/.bash_profileログイン[ g ]
~/.bash_ログインログイン[ g ]
~/.bash_logoutログイン
~/.bashrcint.+n/ログイン
/etc/zshenvはい
/etc/zprofileログイン
/etc/zshrc整数。
/etc/zloginログイン
/etc/zlogoutログイン
~/.zshenvはい
~/.zprofileログイン
~/.zshrc整数。
~/.zloginログイン
~/.zlogoutログイン

説明:

  • 空白は、ファイルがシェルによってまったく読み取られないことを意味します。
  • 「yes」は、起動時にシェルによってファイルが常に読み取られることを意味します。
  • 「login」は、シェルがログイン シェルの場合にファイルが読み取られることを意味します。
  • 「n/login」は、シェルがログイン シェルでない場合にファイルが読み取られることを意味します。
  • 「int.」は、シェルが対話型の場合にファイルが読み取られることを意味します。
  1. ^ ~/.tcshrcが見つからない場合のみ
  2. ^ Bourne Shellの新しいバージョンのみ
  3. ^「ユーザー移植ユーティリティオプション」をサポートするシステムで利用可能。変数の値は絶対パスでなければならず、「ユーザーの実ユーザーIDと実効ユーザーIDまたは実グループIDと実効グループIDが異なる場合は無視されます。」 [ 13 ]
  4. ^ $ENVは、Bourne Shell の新しいバージョンでは$HOME/.shrcです。
  5. ^ shと同じ動作ですが、 sh(bash 2+)として呼び出された場合、またはbash 4.2以降ではPOSIX互換モード(オプション--posixまたは-o posix付き)で明示的に呼び出された場合に限ります。 [ 14 ]
  6. ^ a b sh/ksh互換モードのみ(bash、sh、kshとして呼び出された場合)
  7. ^ a b c ~/.bash_profile~/.bash_login~/.profileの順に最初に読み込めるファイル。shとして呼び出された場合または少なくとも Bash 4.2 以降では、POSIX 互換モード(オプション--posixまたは-o posixを使用)で明示的に呼び出された場合は、 ~/.profileのみ。

その他のシェル

Unixシェルの概念のバリエーションのうち、BourneシェルやCシェルから派生していないものには次のようなものがある。[ 15 ]

参照

参考文献

  1. ^ a b Tom Van Vleck (1995年2月5日). 「UnixとMultics」 . Multicians.org . 2012年8月14日閲覧
  2. ^ Bourne, Stephen R. (1983年10月). 「The Unix Shell」 . BYTE . p. 187. 2015年1月30日閲覧
  3. ^ 「V6 Thompson Shell Port - History」 V6shell.org 2012年8月14日閲覧
  4. ^ Louis Pouzin (2000年11月25日). 「貝殻の起源」 . Multicians.org . 2012年8月14日閲覧
  5. ^ Nikolai Bezroukov (2015年8月13日). 「Unixシェルの歴史入門」 . Softpanorama. 2022年6月8日時点のオリジナルよりアーカイブ。 2016年8月21日閲覧
  6. ^ Bourne, Stephen (2009年3月5日). 「プログラミング言語AZ集:Bourne shell(sh)」 (インタビュー). Howard Dahdahによるインタビュー. Computerworld . 2022年8月16日時点のオリジナルよりアーカイブ。 2022年8月16日閲覧
  7. ^ Re: Late Bloomers Revisited」 。 2014年9月20日閲覧
  8. ^ Korn, David G. (1994 年 10 月 26 日)、「ksh - An Extensible High Level Language」Proceedings of the USENIX 1994 Very High Level Languages Symposium、USENIX Association 2015 年2 月 5 日取得、新しいスクリプト言語を発明する代わりに、Bourne シェルを修正し、必要に応じて組み込みコマンドを追加することで、フォーム入力システムを構築しました。
  9. ^ Harley Hahn. 「Unix/Linuxタイムライン」 . Harley HahnのUnixとLinuxガイド.
  10. ^ 「Hamilton C shell for Windows リリースノート 4.0」 。 2014年9月20日閲覧
  11. ^ 「さまざまなUNIXシェル」 unixnote.com. 2010年。2016年4月3日時点のオリジナルよりアーカイブ2016年8月21日閲覧。
  12. ^ Harley Hahn. 「第14章 シェルの使用:初期化ファイルの練習問題と解答」 Harley HahnのUnixとLinuxガイド.
  13. ^ 「シェルコマンド言語」 . opengroup.org . 2015年6月15日閲覧
  14. ^ 「Bashリファレンスマニュアル:Bashスタートアップファイル」 . gnu.org . 2015年6月15日閲覧
  15. ^ 「FreeBSD Ports: Shells」 . Freebsd.org. 2014年3月30日. 2021年1月12日時点のオリジナルよりアーカイブ2014年4月5日閲覧。