![Screen Shot 2024-03-05 at 9 11 07 PM](https://private-user-images.githubusercontent.com/104954561/310114481-b9058650-6015-470f-a644-3b4bb118b518.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE0NDgxLWI5MDU4NjUwLTYwMTUtNDcwZi1hNjQ0LTNiNGJiMTE4YjUxOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04NzgyNDBlMTYyMjczMTc2OGFmZWFhZTRmOTMyZGU1MjU1MjE3NjVlYmM5ZGUzMGE0MTE4ZDViOThlN2JiYzNjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.qJ0pYVTdOB3kJ-NPejeLKXyFm-9g0WUVXEAbkVPEV2o)
- Bash Manual을 참고하여 쉘을 구현한다
- Recursive descent parser
- Inter Process Communication
- 기본적인 쉘 기능
- Built-in 명령어
- 환경변수
- 상대경로, 절대경로
- 파이프
- 리다이렉션
- 시그널
![](https://private-user-images.githubusercontent.com/104954561/310110829-f337961f-795c-4b76-9bca-a2dadda1720c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEwODI5LWYzMzc5NjFmLTc5NWMtNGI3Ni05YmNhLWEyZGFkZGExNzIwYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMmVhNjBlYzY3OTM4NDczOTgxZWI2NzQ1MmEwM2FkNDBhZWQxZDVmYTc3NGQ1MjVjYmU4OWU1N2FhZmIyMTM4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.xjyswilDL8dmMUAF_1IHVkUOqCXVyrZI-Guk3l8jII8)
- <pipe> ::= <group> “ | ” <group> | <group> “|” <pipe>
- <group> ::= <cmd> | <redir> <cmd>
- <cmd> ::= <ex_cmd> | <cmd> <option>
- <redir> ::= <redirection> | <redir> <redirection>
- <redirection> ::= “<” <file> | “>” <file> | “>>” <file> | “<<” <limiter>
![Screen Shot 2024-03-05 at 9 26 46 PM](https://private-user-images.githubusercontent.com/104954561/310119532-2168046a-1e0a-4f72-b6b5-8b1f30d0cf13.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTMyLTIxNjgwNDZhLTFlMGEtNGY3Mi1iNmI1LThiMWYzMGQwY2YxMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02MDg1NTk1ZDY5MjhmZTQ3MWRiMGE5NTkyMjE4OThkOTQ2M2MwYzc2ZjI5YTc3ODNjMjRiNWRhYzg0Nzc5ZDE3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.egOlkehmNH6xlqRyBs1sSnQBLAqM_btOUJPzji0IRvA)
![Screen Shot 2024-03-05 at 9 25 37 PM](https://private-user-images.githubusercontent.com/104954561/310119537-10ecc07c-8319-4863-b292-f970b25f495d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTM3LTEwZWNjMDdjLTgzMTktNDg2My1iMjkyLWY5NzBiMjVmNDk1ZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNjFmNjVjNzQwZjBiMDQ4MTI0ZDliMjkwMjU3MWM3MGY4NDY5OWE4ZTlhNDVlMjA4ZDJlOGVmZDgxMTQzMGEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.cYsGV-bXa0ODzlu72KRNj_Ho4Z0bcpN5Z9bXk1_Q8R4)
![Screen Shot 2024-03-05 at 9 23 25 PM](https://private-user-images.githubusercontent.com/104954561/310119538-f7d056e1-e1c5-4d2f-9c41-1ed2cb80c2fa.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTM4LWY3ZDA1NmUxLWUxYzUtNGQyZi05YzQxLTFlZDJjYjgwYzJmYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xN2EwOTIzZTUxNjk0ZTExZTlmZjRjYjc3ZTQxMTc2NWY2YzQ4M2NiYWQwMzljMzlhMzZlYTdkMDQxNzQ3ODlhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.3fEhLX_Ug4QdfNMnXVTpO4B8SD2RZlfcQJ-9HbeKeqY)
env
환경 변수 목록을 출력export
환경변수를 설정하거나 환경변수 목록을 출력unset
환경변수를 삭제pwd
현재 디렉토리 출력cd
디렉토리 변경exit
쉘 종료 (파이프 제외)echo - n
문자열 출력, n옵션은 줄바꿈을 하지 않음git clone
make
./minishell
![Screen Shot 2024-03-05 at 9 05 43 PM](https://private-user-images.githubusercontent.com/104954561/310113367-d8081710-e28f-4756-9709-d70d2198dcf3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzMzY3LWQ4MDgxNzEwLWUyOGYtNDc1Ni05NzA5LWQ3MGQyMTk4ZGNmMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jYWE5YjQyOGJkNDUyOWFmZjdkM2FiMDFhZjdmODVhNjA2NWY2MjBkNTkxZTM1YWNkNjRmZDM5YmIzMzdmZmRjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.l7AN5NmNXt9lknVuCpOswqKbMlH2YSwGjnbQ6pcx6MY)
![Screen Shot 2024-03-05 at 9 05 17 PM](https://private-user-images.githubusercontent.com/104954561/310113381-588043bf-f975-45d0-b70d-233e641ad53c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzMzgxLTU4ODA0M2JmLWY5NzUtNDVkMC1iNzBkLTIzM2U2NDFhZDUzYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iYTBiYzY5YTdhMzRhNTI0NGY1ZGIyYzM4MGNhMTU5NjEwMjQwOGQwNjhiYmVkNjVmNGE0MjgyMjNjYTE0MGRlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.s0S796MajrRllNn4ZYGVfxU5TLrcIGQwSgxCmpkBIMM)
![Screen Shot 2024-03-05 at 9 06 55 PM](https://private-user-images.githubusercontent.com/104954561/310113406-8f23e286-743d-491d-9f9d-d68ce8ece992.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzNDA2LThmMjNlMjg2LTc0M2QtNDkxZC05ZjlkLWQ2OGNlOGVjZTk5Mi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xODdkZTQyMmE1YzAyYjA3YjFlOTgwMjZkMzVlMGZiNWZlMGEzMDNiNTE3MzM2ZjQyZjIyNDc0NzAwMDEwM2UwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.2Ksz74uMUpboQ3nA4Cg5Ykw_2f6EvbolFeGJXGhGunI)
![Screen Shot 2024-03-05 at 9 06 12 PM](https://private-user-images.githubusercontent.com/104954561/310113436-5cb72e6b-e993-4c88-b17d-965f9e7c43ab.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyMzA1MTIsIm5iZiI6MTcyMjIzMDIxMiwicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzNDM2LTVjYjcyZTZiLWU5OTMtNGM4OC1iMTdkLTk2NWY5ZTdjNDNhYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwNTE2NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lZWJlNGY1ZWQ2YjgwODNkZjQxZjZiMGEwODBhNDkyNGFkMGJiYTY2Y2MwNTEzNmRkNjNiMzFkMWM3OWM4MGNlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.yZflrIs9_wfPIpOULc1eAcwP3kMoqP7ijHZOnBExgj4)