[42 Seoul] Minishell - 서브젝트

현톨·2022년 11월 28일
0

42 서울 기록하기

목록 보기
8/8

과제 내용

프로그램 이름 minishel
제출 파일 -
Makefile Yes
매개변수 -
허용 함수 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
설명 쉘을 만드세요

당신의 쉘은 다음과 같아야 합니다.

  • 닫히지 않은 따옴표나 \ 또는 ;와 같은 지정되지 않은 특수 문자를 해석하지 마십시오.
  • 전역 변수를 1개 이상 사용하지 말고, 전역 변수를 사용하는 이유에 대해 설명 해야합니다.
  • 새 명령을 기다릴때, 프롬프트를 표시합니다.
  • 작업 기록을 가져야 합니다.
  • 올바른 실행 파일을 검색하고 실행해야합니다. (PATH 변수 기반 또는 상대 혹은 절대 경로를 사용)
  • 다음의 내장 기능을 구현해야합니다.
    -n 옵션을 사용한 echo,
    상대 또는 절대 경로만 작동하는 cd,
    옵션이 없는 pwd,
    옵션이 없는 export,
    옵션이 없는 unset,
    옵션이나 인수가 없는 env,
    옵션이 없는 exit
  • ' 는 일련의 문자에 대한 모든 해석을 금지합니다.
  • " 는 $.s를 제외한 일련의 문자 해석을 금지합니다.
  • Redirections:
    • '<'는 입력을 리다이렉션 해야합니다.
    • '>'는 출력을 리다이렉션 해야합니다.
    • '<<'는 구분 기호만 포함된 줄이 표시될 때 까지 현재 소스에서 입력을 읽습니다. 기록을 업데이트할 필요가 없습니다!(here_doc)
    • '>>'는 append 모드로 출력을 라다이렉션 해야합니다.
  • Pipes라인에 있는 각 명령의 출력은 파이프를 통해 다음 명령의 입력에 연결됩니다.
  • 환경 변수 ($ 다음에 오는 문자)는 해당 값으로 확장되어야 합니다.
  • $?는 가장 최근에 실행된 포그라운드 파이프라인의 종료 상태로 확장되어야 합니다.
  • ctrl-C, ctrl-D, ctrl-\는 bash에서처럼 작동해야 합니다.
  • 대화형일 때:
    • ctrl-C: 새 줄에 새 프롬프트를 출력합니다.
    • ctrl-D: 쉘을 종료합니다.
    • ctrl-\: 아무 작업도 하지 않습니다.

물어보지 않은 것은 요구하지 않습니다. 이해가 안된다면 bash를 참조로 사용하세요.

보너스

  • &&와 ||를 구현하세요. 우선 순위는 괄호로 지정합니다.
  • wildcard *는 현재 작업 디렉토리에서 작동해야 합니다.
profile
기록하는 습관 들이기

0개의 댓글