Skip to content

Mxn-ptr/simple_shell

Repository files navigation

Project Simple Shell

This project is for the end of semester project of Holberton School. It's a reproduction of the Shell, the Linux command interpreter but in a simplified version.

How it works ?

  1. We have a prompt "$ ".
  2. The program waits for the user's command.
  3. The command is separated into string arrays with the space as delimiter.
  4. It searches if the command is a built-in. If yes, it executes it. Else it continues.
  5. It searches if the input of the user is the absolute path of the command. If yes, it executes. Else, it searches the absolute path and returns it.
  6. It executes the command. And restart to the step 1.

Learning objectives

- Who designed and implemented the original Unix operating system
- Who wrote the first version of the UNIX shell
- Who invented the B programming language (the direct predecessor to the C programming language)
- Who is Ken Thompson
- How does a shell work
- What is a pid and a ppid
- How to manipulate the environment of the current process
- What is the difference between a function and a system call
- How to create processes
- What are the three prototypes of main
- How does the shell use the PATH to find the programs
- How to execute another program with the execve system call
- How to suspend the execution of a process until one of its children terminates
- What is EOF / “end-of-file”?

List of allowed functions and systems calls

- 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)
- getpid (man 2 getpid)
- 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)

Cloning the repository

git clone https://github.com/Mxn-ptr/simple_shell.git

Compilation

gcc -Wall -Werror -Wextra -pedantic -std=gnu98 *.c -o hsh

Testing

$ ./hsh
 ($) /bin/ls
 hsh main.c shell.c hello.c
 ($) ls
 hsh main.c shell.c hello.c
 ($) exit
$

but also in non-interactive mode :

$ echo "/bin/ls" | ./hsh
hsh main.c shell.c hello.c
$ cat hello.c | ./hsh
#include "main.h"

int main()
{
    printf("Hello everyone !\n");
    
    return (0);
}

Credits

This project was created by Lucas Doual and Maxence Potier.

Lucas Doual :

Maxence Potier :

About

Project Simple Shell for Holberton School

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages