728x90
반응형
서론
테스트 케이스
leaks
minishell 프롬프트에 각종 명령이나 동작 사용하고 leaks minishell 으로 확인해보자.
- 공백 입력 릭
- cd 릭
- << (히어독) 내부 릭
- 자식 프로세스 릭
exit status
각종 명령이나 동작 사용하고 echo $? 로 exit status 확인해보자.
bash 출력값과 미니쉘 출력값이 다를 경우(특히 오류 메시지) 대부분 exit status가 잘못됐을 수 있다. exit status 값을 strerror 인자로 넘겨서 오류 메시지를 출력하는 것이 좋다.
- 파이프라인 뒤에 exit status
- 항상 0
- 예시(앞의 명령이 올바른 경우): ls | echo $?
- 예시(앞의 명령이 잘못된 경우): aaaaa | echo $?
- 시그널 처리 후 exit status 확인
- cntl + c, cntl + d, cntl + \
- cat 도중에도 시그널 보내보고 exit status 확인
- exit에 인자 넣어서 미니쉘 종료 시 인자로 넣은 숫자가 매우 크다면 numeric argument required 뜨면서 종료 + 종료코드 255
redirection
- 최대 히어독 개수는 16개, 넘어가면 오류
- 리다이렉션 위치 상관 없음 (맨 처음 또는 맨 뒤, 심지어 명령과 인자 사이에도 올 수 있으며 단독으로 나올 수도 있음)
ls > test1 -a < test2 -l
export 및 env
- 인자 없이 export 사용 시 환경변수 내역이 잘 나와야 한다. 또한 내용은 알파벳 순서로 정렬되어 있다.
- export 명령에 잘못된 인자를 넣어서 실패했을 경우 env에는 쉘 변수가 추가되지 않는데 export 출력 결과에는 존재하는 경우도 있음.
- env 없을 때 세그폴트 날 수 있음 env -i ./minishell
- export TEST="ls -a -l" 이후 $TEST 입력하면 ls -a -l 명령어의 결과 나옴
env
env는 인자가 없는 빌트인 함수이므로 뒤에 명령어가 오면 무시됨
quote
- 명령어 중간에 quote 들어갈 수 있음. e''""c'h'"o" hi 이런 거 잘 작동함.
- 리다이렉션이나 파이프 앞뒤로 문자열 온 것도 파싱 가능 cat>test 또는 ls|expr $?
기타
- top 명령 이후 동작 안함. bash에서도 같은 문제가 있던데 구체적인 테스트 방법은 까먹음
- cat | cat | cat 이런 식으로 cat 여러번 열고 시그널 주기 (cntl + c,d,\)
- << a << b << c 이런 식으로 히어독 여러번 열고 시그널 주기
- cat | ls 결과 bash와 비교해보기
- $PATH를 ".:..", ".:..:bin" 이런식으로 설정하고 ls라는 이름의 실행 파일 만든 후 chmod로 권한 설정하면서 테스트 해보기
- 파이프 제대로 안닫아줘서 fd 많이 쓸 경우 pipe failed 에러 뜨고 종료되기도 했음 fd 개수 테스트 필요
- 파이프 | 뒤에 쉘 변수 $VAR 올 때, 특수문자 기준으로 파이프 기호 뒤 명령 올바른지 파싱한다면 동작하지 않을 수 있음
+)
후기
앞에 설명한 내용 말고도 미니쉘 예외 사항은 정말 끝도 없이 나온다. 상상치도 못한 것들이 많다. 예외 사항을 찾는다면 틈틈이 포스팅 업데이트 하겠다. 열심히 하자.
728x90
반응형
'대외활동 > 42서울' 카테고리의 다른 글
[42서울] Netpractice LEVEL 8 문제 풀이 (1) | 2024.11.11 |
---|---|
[42서울] minitalk 구현(Makefile 포함) (0) | 2024.08.22 |
[42서울] so_long 그래픽, mlx 라이브러리 (0) | 2024.08.11 |
[42서울] so_long 맵 유효성 검사(BFS) (0) | 2024.07.22 |
[42서울] get_next_line 구현 (메모리 누수 잡기, 구현 tip) (1) | 2024.07.21 |