https://github.com/jos-felipe/okish
A shell inspired on bash, but less complex.
https://github.com/jos-felipe/okish
ci-cd qa-automation
Last synced: 4 days ago
JSON representation
A shell inspired on bash, but less complex.
- Host: GitHub
- URL: https://github.com/jos-felipe/okish
- Owner: jos-felipe
- License: gpl-3.0
- Created: 2024-09-02T14:46:23.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-09-07T01:19:13.000Z (10 months ago)
- Last Synced: 2024-09-07T21:16:55.134Z (10 months ago)
- Topics: ci-cd, qa-automation
- Language: C
- Homepage:
- Size: 94.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Occami Shell
It is free software inspired by bash that aims to be a command line interpreter for interactive development environments in POSIX systems.
Occam's Razor is the philosophy that guides development and decision-making in the face of conflicts, keeping only the features most used by developers and, in the case of multiple solutions, choosing the simplest.
The initiative also serves as a laboratory to train software engineering techniques—unit tests, integration tests, teamwork, asynchronous communication, code versioning, automated test routines, etc.
This shell has the following features:
+ Display a **prompt** when waiting for a new command.
+ Have a working **history**.
+ Search and launch the right executable (based on the **PATH** variable or using a relative or an absolute path).
+ Avoid using more than one global variable to indicate a received signal. Consider the implications: this approach ensures that your signal handler will not access your main data strucutures.
+ Not interpret unclosed quotes or special characters which are not required by the subject as \ (backslash) or ; (semicolon).
+ Handle ' (single quote) which should prevent the shell from interpreting the metacharacters in the quoted sequence.
+ Handle " (double quote) which should prevent the shell from interpreting the metacharacters in the quoted sequence except for $ (dollar sign).
+ Implement **redirections**:
* '<' should redirect input.
* '>' should redirect output.
* '<<' should be given a delimiter, then read the input until a line containing the delimiter is seen. However, it doesn't have to update the history!
* '>>' should redict output in append mode.+ Implement **pipes** (| character). The output of each command in the pipeline is connected to the input of the next command via a pipe.
+ Handle **environment variables** (**$** followed by a sequence of characters) which should expand their values.
+ Handle **$?** which should expand to the exit status of the most recently executed foreground pipeline.
+ Handle ctrl-C, ctrl-D and ctrl-\ which should behave like in **bash**.
+ In interactive mode:
* ctrl-C displays a new prompt on a new line.
* ctrl-D exits the shell.
* ctrl-\ does nothing.+ Implement the following **builtins**:
* echo with option -n
* cd with only a relative or absolute path
* pwd with no options
* export with no options
* unset with no options
* env with no options
* exit with no options## References
1. 42 Network. (2023). Minishell - As beautiful as a shell, Version 7.1 [PDF file]. https://projects.intra.42.fr/projects/42cursus-minishell. (Accessed March 4, 2024)
2. Free Software Foundation. (2022). GNU Bash manual. https://www.gnu.org/savannah-checkouts/gnu/bash/manual/. (Accessed March 4, 2024)
3. The Open Group. (2018). The Open Group Base Specifications Issue 7, 2018 edition. https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/. (Accessed March 4, 2024)