minishell


Mandatory

  • 하나 이상의 전역변수 사용금지, 전역변수를 사용했을 시 사용한 이유 설명.
  • 새로운 명령을 기다릴 때, 프롬프트 show
  • bash에서와 같이 올바른 실행파일을 탐색하고 실행.(PATH 환경변수 또는 상대, 절대 경로를 기반)
  • bash에서와 같이 내장기능 구현
    • echo -n 옵션과 같이
    • cd (상대경로, 절대경로와 같이)
    • 옵션 없는 pwd
    • 옵션 없는 export
    • 옵션 없는 unset
    • 옵션과 인수가 없는 env
    • 옵션 없는 exit
    • 명령어 내에 ;은 bash에서와 같이 명령어를 구분해야 함.
    • '와 "은 여러 줄 명령에 대해서는 제외하고 bash에서와 같이 동작.
    • 리다이렉션 <, >, >>은 파일 디스크립터 aggregation에 대해 제외하고 bash에서와 같이 동작.
    • 파이프 | 은 여러 줄 명령에 대해 제외하고 bash에서와 같이 동작.
    • 환경변수들($뒤에 문자가 따르는)은 bash에서와 같이 동작.
    • $?는 bash에서와 같이 동작.
    • crtl-c, crtl-d, crtl-\는 bash에서와 같이 동작.
    • 위, 아래 방향키를 사용하여 termcap 내역을 사용해서 명령을 탐색하고 편집할 수 있어야 함.(line을 수정하는 것, history 수정이 아님.)

Bonus

  • 리다이렉션 << 구현.
  • termcap을 사용한 고급 히스토리와 라인 편집(허용 함수만 사용해야 함.)
    • 커서가 위치한 줄을 편집.
    • 특정 위치에서 라인을 편집할 수 있도록 커서를 좌우로 이동. 새 문자는 클래식 쉘과 유사하게 기존 문자 사이에 삽입 되어야 함.
    • 원하는 키 시퀀스를 사용하여 줄의 전체 또는 일부를 잘라내고, 복사하고, 붙여넣는 기능 구현.
    • crtl+left, crtl+right를 사용하여 한 단어씩 왼쪽이나 오른쪽으로 직접 이동.
    • home과 end를 누르면 라인의 처음과 끝으로 직접 이동.
    • 몇 줄에 걸쳐 명령을 작성하고 편집한다. 이 경우 crtl+up, crtl+down을 사용하면 명령의 한 줄에서 다른줄로 이동할 수 있고 동일한 열 또는 그렇지 않을 경우 가장 적절한 열에 남아있다.
    • &&, || 는 우선순위에 대한 괄호를 포함하여 bash에서와 같이 구현.
    • bash에서와 같이 와일드카드 *를 구현.