# 42sh
42sh school project.
Mandatory part:
- Prompt without line edition.
- Builtins `cd`, `echo`, `exit`, `env`, `setenv`, `unsetenv` with there options.
- Executing simple commands with there parameters using `PATH`.
- Support for redirection `>`, `>>`, `<`and `|`.
- Logical operand `&&`and `||`.
- Separator `;`.
Optional feature (five of theses are mandatory to validate the project):
- Inhibitors `"`, `'`and `\`.
- Advanced redirections: aggregation of file output and heredoc `<<`.
- Globbing: `*`, `?`, `[]`, `{}`, etc.
- Backquotes \`.
- Subshell with operand `()`.
- Local variable and builtin `unset` and `export`.
- History with builtin `history`and `!` with options.
- Advanced line edition.
- File descriptors and builtin `read` with options.
- Dynamical autocompletion.
Optional feature highly appreciated:
- Job Control and builtins `job`, `fg`, `bg` and operand `&`.
- Shell Scripting.
## Shell / Subshell
## Line editing
Keys|Functions|
:-:|:--
Opt+C
Opt+X
Opt+V|Copy
Cut
Paste
Opt+<
Opt+>|Move per words.
Opt+^
Opt+v|Move per line.
Ctrl+L|Clear screen.
Ctrl+C|Terminate/Kill current foreground process.
Ctrl+Z|Suspend/Stop current foreground process.
## History
Keys|Functions|
:-:|:--
^
v|Browse the history.
Ctrl+R|Research function.
`!!`|Retype the last command.
`!n`|Retype the `n`(numerical value) command from the begin of history.
`!-n`|Retype the `-n`(numerical value) command from the last command.
`!name`|Search for a command beginning with `name`.
`!?name`|Search for a command which contain `name`.
## Autocompletion
Autocompletion works with binary, path and env variable.
Output is colored upon type.
Using arrows to navigate is supported.
Autorefreshing with a new input from the user: modification of the list of possibility.
Commands|Functions|
:-:|:--
`$> l[tab]`|Search for binary.
`$> ls s[tab]`|Search for path/files.
`$> $[tab]`|Search for variables in `env`.
## Globbing
Pattern|Behavior|
:-:|:--
`*`|Everything.
`**`|Match directory and sub-directory.
`?`|Single char.
`[a-z]`|Match range from `a` to `z`.
`[!a-z]` `[^a-z]`|Exclude range from `a` to `z`.
`{ab, ac}`|Match `ab` or `ac`.
## Hash table
Commands|Functions|
:-:|:--
`hash`|List the content of the hash table.
`hash -r`|Clear the memory of the hash table.
## Job Control
Commands|Functions|
:-:|:--
`jobs`|List all the current running jobs.
`fg`|Bring the most recent process to foreground.
`fg n`|Bring the specified jobs to foreground where `n` is the numerical value of the process found in `jobs`.
## scripting