Write a Linux terminal shell. Your shell should act similar to bash. At a high level, your shell should accomplish the following:
1. Print a prompt when waiting for input from the user.
2. Continuously accept commands from the user and execute them until the user exits the shell.
_ If the command the user enters does not exist on the system, an error message should be displayed.
3. Accept the change directory command, and appropriately change the current working directory.
_ If the directory the user enters does not exist, an error message should be displayed.
4. Your shell must keep a history of the last 10 commands executed. The user should be able to cycle through the history using the up and down arrow keys.
5. Your shell must accept the pipe "|" operator. This will execute two commands, where the first process will output to the input of the second process.
6. Accept an exit command that will close your shell properly.
7. Ignore characters such as the left arrow and right arrow.
8. Properly handle when the user types delete or backspace keys.