[minishell] 구현

J_JEON·2022년 10월 25일
0

minishell

목록 보기
5/5

Minishell

C를 활용해 bash의 일부분을 구현해보는 과제.
파트를 크게 5가지로 나누어 팀원인 jiwolee님과 각각 역할을 나누어 수행했습니다.
저는 tokenizer, built-in, signal, 특수문자 파트를 맡아 수행하였습니다.

Minishell 구조

tokenizer

환경변수처럼 해석이 필요한 문자를 해석하고 문자열을 의미있는 토큰으로 나누어 변환한 뒤 필요한 형태로 가공하여 parser로 전달한다.

이때 환경변수, 쌍따옴표, 홑따옴표, whitespace, 특수문자 등에 대한 처리를 잘 해주어야 이후 편하게 처리가 가능하다.

parser

토큰을 구조를 가진 구문트리(syntax tree)로 변환한다.
→ here-documantaion <<

executor

구문 트리에 맞게 명령을 실행한다.
→ redirection
→ pipe 생성 및 fork 자식프로세스 생성
→ cmd 실행 execve();

built-in

→ echo
→ cd
→ pwd
→ export
→ unset
→ env
→ exit

  • 각 상황에 맞는 적절한 에러메시지를 출력해야함.
  • 상황마다 다른 반환값을 잘 처리해주어야 함.

signal

→ ctrl + c
→ ctrl + \
→ ctrl + d

  • 시그널에도 반환값이 있는 경우가 있으니 잘 처리해주어야 함.
  • termios를 활용하여 출력값을 잘 조절하면 편함.
  • ctrl + d 는 signal()로 사용가능한 시그널이 아님.

특수문자

→ $?
→ $...

  • $? = 이전의 반환값을 반환해주는 특수문자
  • $... = 환경변수

자세한 작업사항이 담겨있는 Notion 링크

완성한 minishell Github 링크

profile
늅늅

0개의 댓글