In this project we'll create a simple UNIX command interpreter in C programming language.
-
- What is Shell
- What is it for
-
- General requirements
- Allowed functions
-
- Download
- Compilation
- Testing
- Files
- Show flowchart
-
- Resources
-
A shell is a command-line interpreter, it is the computer program that provides a user interface to access the services of the operating system. Depending on the type of interface they use, shells can be of various types, in this case, a shell program of the type sh (Bourne Shell) will be developed. Users typically interact with a shell using a terminal emulator that is used for entering data into and displaying or printing data from, a computer or a computing system.
This consists of interpreting orders. It incorporates features such as process control, input/output redirection, law listing and reading, protection, communications, and a command language for writing batch programs or scripts. All Unix-type systems have at least one interpreter compatible with the Bourne shell. The Bourne shell program is found within the Unix file hierarchy at /bin/sh.
- Allowed editors: vi, vim, emacs
- All your files will be compiled on
Ubuntu 14.04 LTS - Your C programs and functions will be compiled with
gcc 4.8.4using the flags-Wall-Werror-Wextraand-pedantic - Your code should use the Betty style. It will be checked using betty-style.pl and betty-doc.pl
- No more than 5 functions per file
- All your header files should be include guarded
- This shell should not have any memory leaks
- Unless specified otherwise, your program must have the exact same output as
sh(/bin/sh) as well as the exact same error output.
access(man 2 access)chdir(man 2 chdir)close(man 2 close)closedir(man 3 closedir)execve(man 2 execve)exit(man 3 exit)_exit(man 2 _exit)fflush(man 3 fflush)fork(man 2 fork)free(man 3 free)getcwd(man 3 getcwd)getline(man 3 getline)isatty(man 3 isatty)kill(man 2 kill)malloc(man 3 malloc)open(man 2 open)opendir(man 3 opendir)perror(man 3 perror)read(man 2 read)readdir(man 3 readdir)signal(man 2 signal)stat(__ xstat) (man 2 stat)lstat(__ lxstat) (man 2 lstat)fstat(__ fxstat) (man 2 fstat)strtok(man 3 strtok)wait(man 2 wait)waitpid(man 2 waitpid)wait3(man 2 wait3)wait4(man 2 wait4)write(man 2 write)
You can clone this repository this way:
git clone https://github.com/nathsotomayor/simple_shell.git
Your shell will be compiled this way:
gcc -Wall -Werror -Wextra -pedantic *.c -o hsh
Your shell should work like this in interactive mode:
$ ./hsh
($) /bin/ls
hsh main.c shell.c
($)
($) exit
$
Also in non-interactive mode:
$ echo "/bin/ls" | ./hsh
hsh main.c shell.c test_ls_2
$
$ cat test_ls_2
/bin/ls
/bin/ls
$
$ cat test_ls_2 | ./hsh
hsh main.c shell.c test_ls_2
hsh main.c shell.c test_ls_2
$
| ## | File | Description |
|---|---|---|
| 1 | README.md | Readme |
| 2 | man_1_simple_shell | Man page Simple Shell based in sh(1) - Linux man page |
| 3 | main.c | Entry point |
| 4 | holberton.h | Header file |
| 5 | interactive.c | It runs when it receives input through the non-interactive modes echo and cat, in addition to real-time execution. |
| 6 | non_interact.c | Error message when you receive parameters using the argc and argv arguments. |
| 7 | create_process.c | This function validates the existence of a file locally, and $PATH, if the file exists, creates a child process that validates all its error states. Using the stat() , fork() , execve() and waitpid() functions |
| 8 | validate_file.c | This function validates if a file is found in the paths of the system PATH by means of the stat system call. |
| 9 | _getenv.c | This function returns a specified environment variable. |
| 10 | _exit.c | This function return a value especific of exit. |
| 11 | printf_env.c | This function emulates the operation of the env function, printing the environment variables. |
| 12 | str_function.c | Auxiliary functions for handling character strings: strlen() , _strcat() , _strcpy() and _strdup() . |
| 13 | strcmp_function.c | Auxiliary functions for character string comparison: _strcmp() and _strncmp() . |
| 14 | _calloc.c | This function emulates the operation of the calloc() function. Allocate and zero-initialize array |
Read or watch:
man or help:
sh(Runshas well)
Made with 💛 in Holberton School Colombia (Cali)

