「シェルとは何か?コマンドラインインタプリタとは何か?」について「シェルもどき(oreshell)」をgoで作りながら学ぶ。
シェル (英語: shell) はオペレーティングシステム(OS)があるような高機能なコンピュータにおいて、ユーザーのためにインタフェースを提供するコンピュータプログラムであり、オペレーティングシステムが提供する機能へのアクセスを提供する。(略)
コンピュータシステムとユーザーの間にある「殻」であることから、このように呼ばれる。
大まかに2種類に大別すると、キャラクタユーザインタフェース(CUI)ベースのコマンドラインインタプリタ(CLI)の形態をとる「コマンドラインシェル」と、グラフィカルユーザインタフェース(GUI)ベースでいわゆる「デスクトップメタファ」等の環境へのユーザインタフェースという形態をとる「グラフィカルシェル」に分けられる。
Unix/Linuxの場合、シェルを説明するときによく使われる図は以下の通り。
OS利用者はOSの中核(カーネル)に対して、操作/要求を直接送ることはできない。
シェルを通じてカーネルに操作/要求を送る。
コマンドラインインタプリタ (英: command line interpreter) は、コンピュータのコマンドライン、すなわち、ユーザによりキーボードなどから入力される文字列の行(ライン)のコマンドを解釈し、オペレーティングシステム(以下、OS)やプログラミング言語処理系などに渡す、コマンドラインインタフェースであり、キャラクタユーザインタフェースを構成する要素である。
OSの標準ユーティリティとしてはコマンドラインシェルがあり、いくつかのプログラミング言語処理系が持つそれに関してはRead-Eval-Print Loopも参照。
■入力、実行(評価)、出力の繰り返し
コマンドラインインタプリタは以下の4つを順に行う。(REPL)
■キーボード入力と画面出力
一般的に、プログラムは入力と出力を持つ。
Unixの影響を受けたOS(linux,windows,macなど)のコマンドラインプログラムの場合、デフォルト状態ではキーボード(端末)の入力を標準入力、画面(端末)への表示を標準出力として持つ。(エラー時の画面表示は標準エラー出力。)
コマンドラインインタプリタも標準入力、標準出力、標準エラー出力を持つ。
(キーボード入力と画面表示がどのようにシェルプロセスと入出力を行うかの説明は長くなるので省略)
■「/usr/bin/ls」と入力した場合
期待通り、カレントディレクトリにあるファイル名の一覧を表示した。
■「/usr/bin/pwd」と入力した場合
期待通り、カレントディレクトリ名を表示した
■「ls」と入力した場合
エラーになった。
■「/usr/bin/ls -al」と入力した場合
エラーになった。
■「cat main.go」と入力した場合
エラーになった。
■「cd ..」と入力した場合
エラーになった。
■「/usr/bin/ls | /usr/bin/sort > sort.txt &」と入力した場合
なぜエラーになるのか。
その原因の話は次回以降。