![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE0NDgxLWI5MDU4NjUwLTYwMTUtNDcwZi1hNjQ0LTNiNGJiMTE4YjUxOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mOTg5NGZkYjgyZmI3M2JkOTI4ZDY3ZDU4ZmRhNjlmYjU0NGRjNDBkNjA2MTIxNWExZjhjMWFlODQ1NTUyM2IzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.FFCwz2MdwqopVLOTOk4ecgzpRdi-JfWwj2ZCWZ_b9Vc)
- 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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEwODI5LWYzMzc5NjFmLTc5NWMtNGI3Ni05YmNhLWEyZGFkZGExNzIwYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05NzRmYmExYWVlNGY0YWRiYzNlMzk3MWY0YTJkNTRjMDUyOTY4ZTI0NzE1ZTkwZjBjMzdhMGNjZmY2MTU1MjFkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.ui0QowscPRsFPSYv6gd_KgAvwPo5YdsWaiP7gkYgjaw)
- <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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTMyLTIxNjgwNDZhLTFlMGEtNGY3Mi1iNmI1LThiMWYzMGQwY2YxMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMDdhOTUyNmE3NzI2OTY1ZmUxOTlhZjg2MjIzOWFhYjVkMmEwZGVjMjgxODA5NjExYjIwNTdmMTkzNWQwMjZiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.Ydg0twop-2Ep_HznPKVrG5nOIOzpXfgap6UxbDiVUkM)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTM3LTEwZWNjMDdjLTgzMTktNDg2My1iMjkyLWY5NzBiMjVmNDk1ZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wOTU2YmUyYzYwYTJkNGE0YmRhOTFiZTdiNDRmNjRlMjNkZjRmOWI3MGIyYzZjZGY3MTg1Y2U5NWFkMDU1ZGY3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.Y3OEnPmdpILjyA3zafxh7_ye7YDlybvuk5_Ga7CevwE)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTM4LWY3ZDA1NmUxLWUxYzUtNGQyZi05YzQxLTFlZDJjYjgwYzJmYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zMjRkNGY4OTE3MmFiZmZlMTI5MjRhMjM1MGE0ZmViYmI1NmExZDZjMDUwZjEwMDhmOWQ2NjEyZDA4NTRkMjczJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.tcUJvBp9koacHwYAedhak9J6dfNAVOuppUcezggGRpA)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzMzY3LWQ4MDgxNzEwLWUyOGYtNDc1Ni05NzA5LWQ3MGQyMTk4ZGNmMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03NGZhYjJjYTRiYzA3M2E4MGM0MGJjM2I4YTAyYmQ4YjY1ZmUwMzE4OTRkYzAyYzFiZDI4NzM0ZWQxYjdjOGY0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.mxcQd3BVHi1l5Tup10RV6CYMop2DSKadYFhqyRRAf4w)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzMzgxLTU4ODA0M2JmLWY5NzUtNDVkMC1iNzBkLTIzM2U2NDFhZDUzYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01YjJhNzlhYjIwZDY3MzNiYzk2Nzc3ZDg2MjBiNGQ1MWRjZTQzMmNmYTUwMDViNDNhMmZjN2RhNjk1YjA2Zjk3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.0KimTNMlT1kHXAOVC6hMMCz0rFRd70nd1WgpnmTev7c)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzNDA2LThmMjNlMjg2LTc0M2QtNDkxZC05ZjlkLWQ2OGNlOGVjZTk5Mi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wMGUzYWE4MjQzMDI0MTUwOTZjZmUxY2FhM2U4NWZiYmIyNzNlMjMyMzUxODdiN2ZhMTRhNDkwNTAyYWNlNzNjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.JHObbajHVoq7DlgooTRvKlgd85aS0Rm4VBOzrxhRMSQ)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1NTY0OTMsIm5iZiI6MTcyMTU1NjE5MywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzNDM2LTVjYjcyZTZiLWU5OTMtNGM4OC1iMTdkLTk2NWY5ZTdjNDNhYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMVQxMDAzMTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNzYxNTFkMTQzNTA1ZTUxNWJjODBjMjRkMTc0MWI3ZmQ2NGU5YjFkMWMyMTgwYmQ4ODAyMTAzZjMzYThkMTg1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.J6H7onJnySJqLJe0BbkK7slBa1HGKDLTmX_dS_QjIK4)