KianRistori / Minishell

This project is about creating a simple shell.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Minishell

As beautiful as a shell

Score

Mandatory Part

Program name minishell
Turn in files Makefile, *.h, *.c
Makefile NAME, all, clean, fclean, re
Arguments
External functs. 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
Libft authorized Yes
Description Write a shell

Your shell should:

  • 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).

  • Not use more than one global variable. Think about it. You will have to explain its purpose.

  • Not interpret unclosed quotes or special characters which are not required by the subject such 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 redirect 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 to 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.

  • Your shell must 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 or arguments

    • exit with no options

About

This project is about creating a simple shell.


Languages

Language:C 97.1%Language:Makefile 2.9%