Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ekkoz897/42cursus_minishell
42 - Rewrite a simple shell
https://github.com/ekkoz897/42cursus_minishell
42 42born2code 42project bash minishell minishell42 parsing shell
Last synced: about 17 hours ago
JSON representation
42 - Rewrite a simple shell
- Host: GitHub
- URL: https://github.com/ekkoz897/42cursus_minishell
- Owner: Ekkoz897
- Created: 2023-03-23T17:35:41.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-03-21T18:27:27.000Z (8 months ago)
- Last Synced: 2024-03-21T19:42:05.851Z (8 months ago)
- Topics: 42, 42born2code, 42project, bash, minishell, minishell42, parsing, shell
- Language: C
- Homepage:
- Size: 566 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 42-minishell
The objective of this project is to create a simple shell, like an own little bash.
It is the first group project in the 42 core curriculum.## Project specifications
For the project we were allowed to use GNU's readline library which handles the terminal interaction (history & input reading).
For everything else the subject allows only to use a few low-level functions and a few POSIX system calls.Allowed functions:
```readline, rl_clear_history, rl_on_new_line,rl_replace_line, rl_redisplay, add_history, printf, malloc, free, write, access, open, read,close, fork, wait, waitpid, wait3, wait4, signal, sigaction, sigemptyset, sigaddset, kill, exit, getcwd, chdir, stat, lstat, fstat, unlink, execve, dup, dup2, pipe, opendir, readdir, closedir, strerror, perror, isatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs```## Features
### Basics:
- History of previous entered commands
- Search and launch the right executable (based on the PATH variable, using a relative or an absolute path)
- Environment variables ($ followed by a sequence of characters) expand to their values
- Wildcards * in the current working directory
- ctrl-C, ctrl-D and ctrl-\ behave like in bash
- ```’``` (single quotes - prevent from interpreting meta-characters in quoted sequence)
- ```"``` (double quotes - prevent from interpreting meta-characters in quoted sequence except for $)
- ```$?``` expands to the last exit status
- ```|``` connect cmds or groups with pipes; output of a cmd is connected to the input of the next cmd via a pipe
- ```&&``` and ```||``` with parenthesis for priorities### Builtins:
- ```echo``` with option -n
- ```cd``` (relative or absolute path, ```-``` for OLDPWD, without arg for HOME)
- ```pwd``` without options
- ```export``` without options
- ```unset``` without options
- ```env``` without options
- ```exit [exit_status]``` without options### Redirections:
```[n]``` (optional) specifies the file descriptor, if not specified it is stdout/stdin
- ```[n]< file``` Redirecting Input
- ```[n]<< limiter``` Here Documents
- ```[n]> file``` Redirecting Output
- ```[n]>> file``` Appending Redirected Output## How to use
The current version of minishell is developed and tested on macOS, but it should work on all UNIX/LINUX based systems as well.
Requirements:
- GCC / CLANG Compiler
- GNU Make
- GNU Readline library```
git clone https://github.com/Ekkoz897/42cursus_Minishell minishell
```
```
cd minishell && make
```
```
./minishell
```