シェルを実装する[2]

実装に入る前に、シェルの役割について考えてみます。

僕の理解では、シェルの役割(のほとんど)はユーザの言葉(入力)をシステムコールの組み合わせに翻訳することなのかなぁと思っています。

でお、それだと曖昧なので、もう少しブレイクダウンしてみます。

  • ログイン時にユーザごとの情報を読み込む
    • ドットファイル
  • ユーザからの入力を受け付ける
    • プロンプト(変更化)
    • タブでいろいろ補完
    • emacs/vi的なキーバインド
    • exitするまで繰り返す
  • コマンドラインを解釈する
    • 様々な演算子「;」「&&」「||」「&」「|」「>」「<」「{}」 など…
    • パイプラインやリダイレクトなど
    • メタキャラクタを展開
  • ユーザが要求したことをシステムコールで実現する
    • コマンドラインを解釈した内容で、正しい順番にシステムコールを呼ぶ
  • 環境変数の設定
    • 管理はカーネル? どこかに全ユーザの環境変数一覧とかあるのか?
  • プロセスの管理(フォアグラウンド、バックグラウンド)
  • 組み込みのコマンドを提供
  • デバイスやファイルシステムとのあれこれ
  • プログラミング言語としてのシェル(if, while, case, foreach的な, def的な)

以下、気になる点。(→調べる)

  • coreって誰が出してるんだろう?
  • システムコールにchdir(2)っていうのがあるってことは、カーネルに持っているのかな。全端末分持ってるのか?
  • Xとかはやめとこう

このへんがプログラムの要件になりますかね。なんか激しく抜けてそうだけど、随時追加な方向で。

で、どこから実装したものか。まずはユーザ入力のところからかな。

コメント

コメントする

目次