Execution environment for applications. Provided by the kernel. Usually provides the hardware (keyboard).
Exposes text buffer. Only one application runs in foreground (this application "owns" keyboard/mouse).
Application. The command interpreter.
Uses terminal, exposes OS functionality for user (via commands). Allows configuration of execution environment (via variables)
Shell utilizes two types of variables:
- local: accessible only via current shell. Not passed to child processes. Created:
a=some_value.
Displayed withsetcommand - exported: passed to every child process. Created:
export a=some_value.
Displayed withenvcommand