An open API service indexing awesome lists of open source software.

https://github.com/sayoonnn/minishell

bash에 대한 감사함을 느낄 수 있는 프로젝트
https://github.com/sayoonnn/minishell

bash c cmake minishell

Last synced: about 2 months ago
JSON representation

bash에 대한 감사함을 느낄 수 있는 프로젝트

Awesome Lists containing this project

README

          

```html
.___ ___. __ .__ __. __ _______. __ __ _______ __ __
| \/ | | | | \ | | | | / || | | | | ____|| | | |
| \ / | | | | \| | | | | (----`| |__| | | |__ | | | |
| |\/| | | | | . ` | | | \ \ | __ | | __| | | | |
| | | | | | | |\ | | | .----) | | | | | | |____ | `----.| `----.
|__| |__| |__| |__| \__| |__| |_______/ |__| |__| |_______||_______||_______|
```

![](https://img.shields.io/badge/c-A8B9CC?style=for-the-badge&logo=c&logoColor=white)
![](https://img.shields.io/badge/cmake-064F8C?style=for-the-badge&logo=cmake&logoColor=white)

## 개요

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 라이브러리를 링크하여 명령 입력 및 히스토리 기능을 지원합니다.