シェルを作ろう(0)導入編

先日、某理学部情報科学システムプログラミング実験の課題の一つとしてシェル(コマンドラインシェル)を作りました。 (制作期間2週間、OCamlインタプリタの作成と並行だったのでえぐかった…) 授業の課題要件を超えて色々と実装したので、せっかくなので記事にします!

環境

シェルといったらCLI,CLIといったらLinux
ということで、今回は以下の様なLinux環境上向けにシェルを作りました。

  • OS: Ubuntu14.04
  • コンパイラ: gcc4.8(マイナーバージョンは忘れたのであとで修正します。)

もしかしたらMacCygwinでも動くかもしれませんが自身がないです。 というのも今回はLinuxシステムコールの嵐!とまでは行かないまでも、多くのシステムコールを使っているので 互換性は保証されません。

ソースコード

とりあえず、作成したソースコードは以下にあるので、気になった方はぜひご覧ください。
https://github.com/progrunner17/my_shell

次回予告

シェルってなんだっけ?ってなった人こんな画面みたことないですか?
f:id:gonta42:20170530231727p:plain
この様にターミナル上で入力を受け取ってコマンドを実行したり色々してくれるプログラムです。*1

という訳で次回は以下のことをやりたいと思います!

  • プロンプトの表示*2
  • 入力の処理
  • コマンドの実行

その次はおそらくforkを使ったプロセスの複製について書きます。
(SECCAMPの応募では時間がなくて全然書けなかったのでぶっちゃけこれを先に書きたい…)

とりあえず導入編はこれで終わり、次回以降実際にシェルの作成の説明をしていこうと思います!
今回こそしっかり最後まで書き上げることを目標にします笑

注釈

*1:GUIシェルなどを考えるとこの定義とは全く異なります。
気になった人は以下リンクなどでより詳しい定義を確認してください。
シェル - Wikipedia

*2: 上記写真でbash-3.2$となっている部分。