ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
# プロジェクト概要
GNU bash(v3.2)をシミュレーションしたminishellを実装
- 期間:2023.1~2023.02
- 規模:2名
- 言語:C
# 担当フェーズ
- シグナルハンドラー、ビルドインコマンド実装
# 工夫&成果
【工夫】
- シェル動作の整理とドキュメンタリー
- シグナルハンドラーのデザイン(シグナルによる子プロセス管理)
- 環境変数とビルドインコマンド(echo, cd, pwd, export, unset, env, exit)実装
【成果】
- ドキュメントの共有でチームメンバーとの意思疎通を図った
- GNU bash公式サイトと動作確認を重ねてサービスの分析能力を培った
- コマンドの仕様に必要なデータ構造設計、要求を明確ができ、パーシングを担当メンバーとの分担、並行設計を遂行
# GitHub
> https://github.com/minishellakirawchen/minishell_rev1/edit/main/Readme.md
# 実装概要
- 新しいコマンドを待っているときにプロンプトを表示する。
- プロンプト履歴保存
- PATH 変数に基づいて、相対または絶対パスを使用して、正しい実行ファイルを検索して起動する。
- バックスラッシュ (\) 引用符で特殊文字を解釈しない。
- ' (シングルクォート) を処理し、メタ文字を解釈しないようにする。
- " (ダブルクォート) を処理し、メタ文字を解釈しないようにする (ただし、$ (ドル記号) を除く)。
- リダイレクトを実装する:
- `<` should redirect input
- `>` should redirect output
- `<<` should be given a delimiter as here-doc
- `>>` should redirect output in append mode
- 演算子を実装する。
- パイプ |: 次のコマンドの入力に接続する。
- 環境変数 ($ の後に文字のシーケンスが続く) を処理し、それらの値に展開する。
- $? を処理し、直前に実行された終了ステータスを展開する。
- ctrl-C、ctrl-D、ctrl-\ を処理し、インタラクティブモードでの bash と同様に動作する:
- ctrl-C は新しい行に新しいプロンプトを表示する。
- ctrl-D はシェルを終了する。
- ctrl-\ は何も行わない。
- 以下の組み込み関数を実装する:
- echo オプション -n 付き
- cd 相対パスまたは絶対パスのみ
- pwd オプションなし
- export オプションなし
- unset オプションなし
- env オプションまたは引数なし
- exit オプションなし