Minishell - shell 프로그램 만들기
bash를 모방해서 작은shell만들기 프로젝트
입력값 : [echo helloworld! > test.txt] 토크나이저 결과 [ "echo", "helloworld!", ">", "test.txt"] 렉서 결과 [ {type: 'command', value:"echo" }, {type: 'string', value: "helloworld!"}, {type: 'redirect', value: ">"}, {type: 'file', value: "test.txt"} ]
쉘에 명령을 입력하면 명령을 Lexical analyze하는데, 그 문자열을 Token으로 나누고 Lexer처리하는 것을 지칭한다.
커맨드를 입력받으면 먼저 본인이 만든 클론함수가 우선순위로 실행된다.
클론함수 (bash 모방함수)
클론 함수1: 현재 디렉토리를 변경하는 cd
클론 함수2: 인자로 보낸 텍스트를 출력하는 echo (-n 옵션 구현)
클론 함수3: 환경변수를 보여주는 env
클론 함수4: 현재 프로세스를 종료하는 exit
클론 함수5: 환경변수를 추가하는 export
클론 함수6: 환경변수를 지우는 unset
클론 함수7: 현재경로를 보여주는 pwd
리다이렉션 (<, <<, >, >>)
echo hello > a > b > c result : a 빈파일, b 빈파일, c hello
다음 파이프전까지 마지막으로 선언 된 리다이렉션이 최종 대상이 된다.
실행 할 명령이 클론함수에 없다면 OS함수 실행하기
운영체제의 PATH에 있는 파일을 실행하기
절대경로를 쓰면 시스템콜stat함수를 이용해서 파일의 존재를 파악하는 방법으로 명령을 실행한다. 만약 그냥 "ls"처럼 파일명만 쓴다면 PATH에 있는 경로를 돌면서 "ls"파일을 찾아 실행한다.
실행 할 때 프로세스를 생성해서 실행한다. 정상적으로 종료되었는지 exit코드를 받아야 하기 떄문이다. 이 때 부모 프로세스는 waitpid함수를 이용해서 자식프로세스의 종료를 기다린다.
Author And Source
이 문제에 관하여(Minishell - shell 프로그램 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jay13jeong/Minishell-shell-프로그램-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)