Home Minishell ① Subject
Post
Cancel

Minishell ① Subject

thumbnail

Summary
이 프로젝트의 목표는 너로 하여금 단순한 셸(shell)을 만들게 하는 것이다. 작은 bash나 zsh를 말이다. 이를 통해 프로세스와 파일 디스크립터에 관해 많이 배우게 될 것이다.

Mandatory part

프로그램명minishell
제출할 파일-
Makefile
인자-
외부 함수readline, rl_on_new_line, rl_replace_line, rl_redisplay,
add_history, printf, malloc, free, write, open, read, close,
fork, wait, waitpid, wait3, wait4, signal, kill, exit,
getcwd, chdir, stat, lstat, fstat, unlink, execve, dup, dup2,
pipe, opendir, readdir, closedir, strerror, errno,
isatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent,
tgetflag, tgetnum, tgetstr, tgoto, tputs
Libft 허용 여부허용
설명셸을 작성해라

너의 셸은 다음의 조건을 만족해야 한다.

  • 닫히지 않은 따옴표나 명시되지 않은 특수문자(\ 또는 ;)를 해석하지 않아야 한다.
  • 한 개 이상의 전역 변수를 사용해선 안된다. 또한 전역 변수를 사용한 이유에 대해 설명할 수 있어야 한다.
  • 새로운 명령어를 기다리는 동안 프롬프트를 보여줘야 한다.
  • 작업 내역(working History)을 가지고 있어야 한다.
  • 올바른 실행파일은 검색하고 실행해야한다. (PATH 변수에 기반하거나 상대 경로나 절대 경로를 사용)
  • 내장 함수(builtins)를 구현해야 한다.
    • echo (-n 옵션)
    • cd (상대 경로 또는 절대 경로)
    • pwd (옵션 없음)
    • export (옵션 없음)
    • unset (옵션 없음)
    • env (옵션 또는 인자 없음)
    • exit (옵션 없음)
  • 은 일련의 문자에 대한 모든 해석을 금지한다.
  • $를 제외한 일련의 문자에 대한 모든 해석을 금지한다.
  • 리다이렉션(redirection)
    • <은 input을 리다이렉트한다.
    • >은 output을 리다이렉트한다.
    • <<은 현재 소스에서 줄에 구분자(delimeter)만이 존재할 때까지 입력을 읽어들인다. History를 갱신할 필요는 없다.
    • >>은 append 모드로 출력을 리다이렉트해야 한다.
  • 파이프파이프라인의 각 명령의 출력은 파이프를 통해 연결되어 다음 명령의 입력으로 들어간다.
  • 환경 변수($ 뒤에 문자가 오는 형식)는 자신의 값으로 확장되어야 한다.
  • $?는 가장 최근에 실행된 foreground 파이프라인의 종료 상태(exit status)로 확장되어야 한다.
  • ctrl-C, ctrl-D, ctrl-\은 bash와 동일하게 동작해야 한다.
  • interactive할 때,
    • ctrl-C는 새 프롬프트를 새 줄에 출력한다.
    • crtl-D는 셸을 나간다.
    • ctrl-\은 아무것도 하지 않는다.
  • 이 외에 사항들은 구현할 필요가 없다.

의심스러운 부분이 있다면 bash를 참고해라.

Bonus part

  • 필수 파트가 완벽하지 않다면 보너스는 생각하지도 마라.
  • 괄호와 함께 있는 &&, ||의 우선 순위
  • 와일드카드 *는 현재 작업중인 디렉토리에서 기능해야 한다.
This post is licensed under CC BY 4.0 by the author.

Philosophers ⑤ 회고

Minishell ② 배경 지식