![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE0NDgxLWI5MDU4NjUwLTYwMTUtNDcwZi1hNjQ0LTNiNGJiMTE4YjUxOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03MWQ1NDQzNmQ1ZDVmNjcyYmYzYjlhOTZjNWUwNGU0YmMxMjQzYzgwMTg4NzllZTNlNWJjMzk0ODAzNmU0ZDIwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.bO1e0CzHQCQoraeER9Qh411Bz8qgssPgfBwXLdyIxWo)
- 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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEwODI5LWYzMzc5NjFmLTc5NWMtNGI3Ni05YmNhLWEyZGFkZGExNzIwYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zY2IxNjFiZjg1MzYwZmE2MWE0MzcxMzFkZGZmZGIxYzlhYWJlZThkMDZjODhlZmNmNjM4OGVkODdlMGFlMzhjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.AXcPmHrVwiJiXooK1fAGP5IITHYujg45Xf-zODhXUGg)
- <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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTMyLTIxNjgwNDZhLTFlMGEtNGY3Mi1iNmI1LThiMWYzMGQwY2YxMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMGM2NWNkZjM4NGQ0YjZhNTA5NWVhYTQ1ODA3ZThjODkxNTk1MzhhNDgxYWYwMzM4YWYyZjk4NTEwNGMyMzEzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Yl9lY9aF5yjaGVTdQWbPpGcYUoRuuXN3dohp47RWXpo)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTM3LTEwZWNjMDdjLTgzMTktNDg2My1iMjkyLWY5NzBiMjVmNDk1ZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kYWU1M2U5Yjc1MTg2MGVhZWQ1Yjk4ZWYzZGMwNTgxZjUzYTYwYTNjZTgxZDkxZDkxMjk5NjRlNTdmNTUxNWI4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.FVah6EU14Z8vJoTzwv5dByOVSOJ0aVphbKk17ZiQyDw)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTE5NTM4LWY3ZDA1NmUxLWUxYzUtNGQyZi05YzQxLTFlZDJjYjgwYzJmYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZTg0MTdiMWExYjYzZjMzNjBhYjNmOTI5MTU4OWI5ZjE5NmYyMjE4ZTMzYjBlZWM1ZTIzZmE5MjYxMzJiZGE2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.f94xWNQc6cuAND96TQeUVZuexajw7buwfZa0KxQq9po)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzMzY3LWQ4MDgxNzEwLWUyOGYtNDc1Ni05NzA5LWQ3MGQyMTk4ZGNmMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03NTJhMjk5OWU1MzgxMTc1ZjliNWMxMmMzZjYwZmNkZTM3M2MyMWJlZDM1ODkxZGIyOTYxMWU4NzA2Yjk5YTI2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Nm6HZpLoK05ESSIc7yol14XVMxnd5GHunzqa_phNHsI)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzMzgxLTU4ODA0M2JmLWY5NzUtNDVkMC1iNzBkLTIzM2U2NDFhZDUzYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lM2UyZWI3ZmU0OGQzNmQzODNiZTlmM2EwMTY5ZDc3ZmViMjhiOTgxZmRhMDEzNjU3N2E5NmUyY2M3YTUxZDY4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.NfuZ3C3d8TvWs7LqK2szsFdsXCGW_SYbU3Bkj4eFfGs)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzNDA2LThmMjNlMjg2LTc0M2QtNDkxZC05ZjlkLWQ2OGNlOGVjZTk5Mi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02OGU4ZTg4OTA5YjUxNmNlZTEyNWYzM2VjYmNjOTYyMDZjODc5ZWFlZjc0YWY5MGNiMjdkZmM5ODYxNzI1MzgxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.r0z6kBxa6mdE4HXLTvHYDDd18rHZLprgXqaTLFgdnIs)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MzcwMDcsIm5iZiI6MTczODgzNjcwNywicGF0aCI6Ii8xMDQ5NTQ1NjEvMzEwMTEzNDM2LTVjYjcyZTZiLWU5OTMtNGM4OC1iMTdkLTk2NWY5ZTdjNDNhYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxMDExNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01YWI4YmY0MmQyOTQ3NDBhYzVmNzM1NmVkM2NkNDM2NzRjZjMyYWViN2JjMjhmYTdiM2EzN2FmZTYyMTliM2E1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.tyTVS0ypGub4_mcwUBy0RoZ8sZbzZHukUQAs9Cmss0w)