- Parse command line
- Lexer
- Tokenizer
- 단어 단위에 의미를 부여한다.
- Parser
- 문법을 검사한다.
- 파이프 단위로 node 를 쪼개고, linked list 에 넣는다.
- Execute command
- 구문 분석 과정에서 만들어진 자료구조를 이용해 각각의 의미를 읽어 실행시킨다.
- 과제에서 요구하는 built-in 이냐, 기존에 존재하는 shell command 냐를 확인하여 실행하는 분기를 나눈다.
- 기존에 존재하는 shell command 는 fork 를 하여 단순하게 그 프로세스를 종료하면 되지만, 몇몇의 환경변수를 다루는 built-in 은 부모 프로세스에도 그 영향을 유지해야 하기 때문에 fork 를 하지 않는다고 한다. 그렇기 때문에 단순하게 exit 을 하면 안 된다.
- Make built-in function
- echo: -n 옵션만 구현
- cd: 상대 경로 또는 절대 경로 구현
- pwd: 아무 옵션 없이 구현
- export: 아무 옵션 없이 구현
- env: 아무 옵션도 없고 인자 없이 구현
- exit: 아무 옵션 없이 구현