実装に入る前に、シェルの役割について考えてみます。
僕の理解では、シェルの役割(のほとんど)はユーザの言葉(入力)をシステムコールの組み合わせに翻訳することなのかなぁと思っています。
でお、それだと曖昧なので、もう少しブレイクダウンしてみます。
- ログイン時にユーザごとの情報を読み込む
- ドットファイル
- ユーザからの入力を受け付ける
- プロンプト(変更化)
- タブでいろいろ補完
- emacs/vi的なキーバインド
- exitするまで繰り返す
- コマンドラインを解釈する
- 様々な演算子「;」「&&」「||」「&」「|」「>」「<」「{}」 など…
- パイプラインやリダイレクトなど
- メタキャラクタを展開
- ユーザが要求したことをシステムコールで実現する
- コマンドラインを解釈した内容で、正しい順番にシステムコールを呼ぶ
- 環境変数の設定
- 管理はカーネル? どこかに全ユーザの環境変数一覧とかあるのか?
- プロセスの管理(フォアグラウンド、バックグラウンド)
- 組み込みのコマンドを提供
- デバイスやファイルシステムとのあれこれ
- プログラミング言語としてのシェル(if, while, case, foreach的な, def的な)
以下、気になる点。(→調べる)
- coreって誰が出してるんだろう?
- システムコールにchdir(2)っていうのがあるってことは、カーネルに持っているのかな。全端末分持ってるのか?
- Xとかはやめとこう
このへんがプログラムの要件になりますかね。なんか激しく抜けてそうだけど、随時追加な方向で。
で、どこから実装したものか。まずはユーザ入力のところからかな。
コメント