No description detected.
Read or watch:
-
Everything you need to know to start coding your own shell concept page
man or help:
sh(Runshas well)
At the end of this project, you are expected to be able to explain to anyone, without the help of Google:
-
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
PATHto find the programs -
How to execute another program with the
execvesystem call -
How to suspend the execution of a process until one of its children terminates
-
What is
EOF/ "end-of-file"?
-
Allowed editors:
vi,vim,emacs -
All your files will be compiled on Ubuntu 20.04 LTS using
gcc, using the options-Wall -Werror -Wextra -pedantic -std=gnu89 -
All your files should end with a new line
-
A
README.mdfile, at the root of the folder of the project is mandatory -
Your code should use the
Bettystyle. It will be checked using betty-style.pl and betty-doc.pl -
Your shell should not have any memory leaks
-
No more than 5 functions per file
-
All your header files should be include guarded
-
Use system calls only when you need to (why?)
There should be one project repository per group. If you clone/fork/whatever a project repository with the same name before the second deadline, you risk a 0% score.
No specific setup detected.
No quiz detected in the exported HTML.
0. README, man, AUTHORS
Files:
Repository: holbertonschool-simple_shell
Task details:
0. README, man, AUTHORS
Write a
README
Write a
man
for your shell.
You should have an
AUTHORS
file at the root of your repository, listing all individuals having contributed content to the repository. Format, see
Docker
Repo:
GitHub repository:
holbertonschool-simple_shell
File:
README.md, man_1_simple_shell, AUTHORS
0. README, man, AUTHORS
---
---
---
---
---
1. Betty would be proud
Repository: holbertonschool-simple_shell
Task details:
1. Betty would be proud
Write a beautiful code that passes the Betty checks
Repo:
GitHub repository:
holbertonschool-simple_shell
1. Betty would be proud
---
---
---
---
---
2. Simple shell 0.1
Repository: holbertonschool-simple_shell
Task details:
2. Simple shell 0.1
Write a UNIX command line interpreter.
Usage:
simple_shell
Your Shell should:
Display a prompt and wait for the user to type a command. A command line always ends with a new line.
The prompt is displayed again each time a command has been executed.
The command lines are simple, no semicolons, no pipes, no redirections or any other advanced features.
The command lines are made only of one word. No arguments will be passed to programs.
If an executable cannot be found, print an error message and display the prompt again.
Handle errors.
You have to handle the "end of file" condition (
Ctrl+D
)
You don't have to:
use the
PATH
implement built-ins
handle special characters :
"
,
'
,
`
,
\
,
*
,
&
,
#
be able to move the cursor
handle commands with arguments
execve
will be the core part of your Shell, don't forget to pass the environ to it…
julien@ubuntu:~/shell$ ./shell
#cisfun$ ls
./shell: No such file or directory
#cisfun$ /bin/ls
barbie_j env-main.c exec.c fork.c pid.c ppid.c prompt prompt.c shell.c stat.c
wait
env-environ.c
exec
fork mypid ppid
printenv
promptc shell
stat
test_scripting.sh wait.c
#cisfun$ ^[[D^[[D^[[D
./shell: No such file or directory
#cisfun$ ^[[C^[[C^[[C^[[C
./shell: No such file or directory
#cisfun$ exit
./shell: No such file or directory
#cisfun$ ^C
julien@ubuntu:~/shell$
echo
"/bin/ls"
| ./shell
barbie_j env-main.c exec.c fork.c pid.c ppid.c prompt prompt.c shell.c stat.c
wait
env-environ.c
exec
fork mypid ppid
printenv
promptc shell
stat
test_scripting.sh wait.c
julien@ubuntu:~/shell$
Repo:
GitHub repository:
holbertonschool-simple_shell
2. Simple shell 0.1
---
---
---
---
---
3. Simple shell 0.2
Repository: holbertonschool-simple_shell
Task details:
3. Simple shell 0.2
Simple shell 0.1 +
Handle command lines with arguments
Repo:
GitHub repository:
holbertonschool-simple_shell
3. Simple shell 0.2
---
---
---
---
---
4. Simple shell 0.3
Repository: holbertonschool-simple_shell
Task details:
4. Simple shell 0.3
Simple shell 0.2 +
Handle the
PATH
fork
must not be called if the command doesn't exist
julien@ubuntu:~/shell$ ./shell_0.3
:) /bin/ls
barbie_j env-main.c exec.c fork.c pid.c ppid.c prompt prompt.c shell_0.3
stat
test_scripting.sh wait.c
env-environ.c
exec
fork mypid ppid
printenv
promptc shell shell.c stat.c
wait
:)
ls
barbie_j env-main.c exec.c fork.c pid.c ppid.c prompt prompt.c shell_0.3
stat
test_scripting.sh wait.c
env-environ.c
exec
fork mypid ppid
printenv
promptc shell shell.c stat.c
wait
:)
ls
-l /tmp
total 20
-rw------- 1 julien julien 0 Dec 5 12:09 config-err-aAMZrR
drwx------ 3 root root 4096 Dec 5 12:09 systemd-private-062a0eca7f2a44349733e78cb4abdff4-colord.service-V7DUzr
drwx------ 3 root root 4096 Dec 5 12:09 systemd-private-062a0eca7f2a44349733e78cb4abdff4-rtkit-daemon.service-ANGvoV
drwx------ 3 root root 4096 Dec 5 12:07 systemd-private-062a0eca7f2a44349733e78cb4abdff4-systemd-timesyncd.service-CdXUtH
-rw-rw-r-- 1 julien julien 0 Dec 5 12:09 unity_support_test.0
:) ^C
julien@ubuntu:~/shell$
Repo:
GitHub repository:
holbertonschool-simple_shell
4. Simple shell 0.3
---
---
---
---
---
5. Simple shell 0.4
Repository: holbertonschool-simple_shell
Task details:
5. Simple shell 0.4
Simple shell 0.3 +
Implement the
exit
built-in, that exits the shell
Usage:
exit
You don't have to handle any argument to the built-in
exit
Repo:
GitHub repository:
holbertonschool-simple_shell
5. Simple shell 0.4
---
---
---
---
---
6. Simple shell 1.0
Repository: holbertonschool-simple_shell
Task details:
6. Simple shell 1.0
Simple shell 0.4 +
Implement the
env
built-in
, that prints the current environment
julien@ubuntu:~/shell$ ./simple_shell
$
env
USER=julien
LANGUAGE=en_US
SESSION=ubuntu
COMPIZ_CONFIG_PROFILE=ubuntu
SHLVL=1
HOME=/home/julien
C_IS=Fun_:)
DESKTOP_SESSION=ubuntu
LOGNAME=julien
TERM=xterm-256color
PATH=/home/julien/bin:/home/julien/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DISPLAY=:0
$
exit
julien@ubuntu:~/shell$
Repo:
GitHub repository:
holbertonschool-simple_shell
6. Simple shell 1.0
---
---
---
---
---
Use the provided task examples and Holberton checker to validate the project.
Project from Holberton School.
README generated with Antoine's README Factory workflow.