https://github.com/sayoonnn/minishell
bash에 대한 감사함을 느낄 수 있는 프로젝트
https://github.com/sayoonnn/minishell
bash c cmake minishell
Last synced: about 2 months ago
JSON representation
bash에 대한 감사함을 느낄 수 있는 프로젝트
- Host: GitHub
- URL: https://github.com/sayoonnn/minishell
- Owner: sayoonnn
- Created: 2023-11-29T08:06:42.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2025-02-27T15:22:00.000Z (over 1 year ago)
- Last Synced: 2025-10-24T12:39:29.771Z (8 months ago)
- Topics: bash, c, cmake, minishell
- Language: C
- Homepage:
- Size: 700 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
```html
.___ ___. __ .__ __. __ _______. __ __ _______ __ __
| \/ | | | | \ | | | | / || | | | | ____|| | | |
| \ / | | | | \| | | | | (----`| |__| | | |__ | | | |
| |\/| | | | | . ` | | | \ \ | __ | | __| | | | |
| | | | | | | |\ | | | .----) | | | | | | |____ | `----.| `----.
|__| |__| |__| |__| \__| |__| |_______/ |__| |__| |_______||_______||_______|
```


## 개요
Minishell은 Linux의 pipe와 다양한 시스템 콜을 이용하여 Bash의 일부 기능을 직접 구현한 셸 프로젝트입니다. GNU Readline 라이브러리를 활용하여 명령어 히스토리, 편집 기능을 제공하며, 리디렉션, 파이프, 환경변수 치환, 내장 명령어 실행 등 실제 셸과 유사한 기능을 구현하였습니다.
## 구현된 기능
- **CLI 프롬프트 제공:** 사용자가 인터랙티브하게 명령어를 입력할 수 있는 프롬프트.
- **명령어 히스토리 지원:** GNU Readline을 통한 입력 히스토리 관리.
- **환경변수 치환:** `$` 기호를 사용하여 환경변수 값을 치환 (큰따옴표와 작은따옴표 구분).
- **리디렉션:** `<`, `<<`, `>`, `>>` 등의 리디렉션 기능 지원.
- **파이프:** `|` 기호를 이용해 명령어 간 데이터를 전달.
- **내장 명령어:** 아래의 내장 명령어들을 직접 구현하였습니다.
- `cd`
- `echo`
- `pwd`
- `export`
- `unset`
- `env`
- `exit`
- **논리 연산자:** `&&`, `||`를 이용한 조건부 명령어 실행 (서브셸 기능은 제한적으로 구현됨).
- **와일드카드:** depth 1의 단순 와일드카드(`*`) 확장 지원.
## 설치 및 빌드 방법
### 필수 도구
Minishell은 CMake를 사용하여 빌드됩니다. 먼저, 아래 명령어로 CMake를 설치하세요.
```bash
sudo apt install cmake
```
### 빌드 방법
1. **기본 (mandatory) 버전:**
```bash
make
```
위 명령어를 통해 기본 셸 기능이 구현된 `minishell` 실행 파일이 생성됩니다.
2. **보너스 (bonus) 버전:**
추가 기능(논리 연산자, 서브셸, 와일드카드 등)이 포함된 보너스 버전을 빌드하려면:
```bash
make bonus
```
## 사용법
빌드가 완료되면 터미널에서 아래와 같이 실행하여 Minishell을 사용할 수 있습니다.
```bash
./minishell
```
Minishell은 사용자가 입력한 명령어를 해석하여 내장 명령어 또는 외부 프로그램을 실행하며, 리디렉션과 파이프 기능 등을 지원합니다.
## 내장 명령어
Minishell에 구현된 내장 명령어는 다음과 같습니다:
- **cd:** 디렉토리 이동
- **echo:** 텍스트 출력
- **pwd:** 현재 작업 디렉토리 출력
- **export:** 환경변수 설정
- **unset:** 환경변수 삭제
- **env:** 환경 변수 목록 출력
- **exit:** 셸 종료
## 보너스 기능
보너스 버전에서 추가적으로 제공하는 기능은 다음과 같습니다:
- **논리 연산자 지원:** `&&`, `||`를 이용한 조건부 명령어 실행
- **서브셸 및 그룹화:** 괄호를 이용한 명령어 그룹화 (일부 제한적 구현)
- **향상된 와일드카드 매칭:** 단일 깊이의 와일드카드(`*`) 확장
## 프로젝트 구조
프로젝트는 크게 두 가지 버전으로 구성되어 있습니다.
- **Mandatory 버전:**
`mandatory` 디렉토리 내에 기본 셸 기능을 담당하는 소스 코드들이 포함되어 있습니다.
- **Bonus 버전:**
`bonus` 디렉토리 내의 소스 코드는 추가 기능(논리 연산자, 서브셸, 와일드카드 등)을 구현합니다.
공통 라이브러리로는 `libft`가 사용되며, GNU Readline 라이브러리를 링크하여 명령 입력 및 히스토리 기능을 지원합니다.