mirror of
https://github.com/BoredDevNL/BoredOS.git
synced 2026-05-15 10:48:38 +00:00
139 lines
5 KiB
Markdown
139 lines
5 KiB
Markdown
# Terminal & Command Line
|
|
|
|
The BoredOS Terminal provides a powerful command-line interface (CLI) for advanced users and developers. It supports standard Unix-like features and provides direct access to the kernel's system calls.
|
|
|
|
## The Shell
|
|
|
|
The default shell in BoredOS is **BoredShell (Bsh)**, a userspace shell with a dedicated terminal app. It features:
|
|
- **ANSI Color Support**: Rich text output with colors and styles.
|
|
- **Command History**: Use the **Up** and **Down** arrow keys to navigate through your previous commands (up to 64 history entries).
|
|
- **Redirection**:
|
|
- `command > file`: Write output to a new file (or overwrite existing).
|
|
- `command >> file`: Append output to an existing file.
|
|
- `command < file`: Use a file as command input.
|
|
- **Piping**:
|
|
- `command1 | command2`: Pass the output of the first command as input to the second.
|
|
- **Command Chaining**:
|
|
- `cmd1 ; cmd2`: Run `cmd2` after `cmd1`.
|
|
- `cmd1 && cmd2`: Run `cmd2` only if `cmd1` succeeds.
|
|
- `cmd1 || cmd2`: Run `cmd2` only if `cmd1` fails.
|
|
- **Background Launch**:
|
|
- `command &`: Start command without blocking the prompt.
|
|
|
|
## Shell Operators & Scripting
|
|
|
|
Bsh provides a suite of operators for managing I/O and controlling execution flow.
|
|
|
|
### I/O Redirection
|
|
|
|
Redirection allows you to change where a command reads its input from or writes its output to by manipulating kernel-level file descriptors (FDs).
|
|
|
|
| Operator | Action | Description |
|
|
| :--- | :--- | :--- |
|
|
| `>` | **Overwrite** | Redirects standard output (FD 1) to a file, creating it if it doesn't exist or truncating it if it does. |
|
|
| `>>` | **Append** | Redirects standard output (FD 1) to a file, appending new data to the end without clearing existing content. |
|
|
| `<` | **Input** | Redirects standard input (FD 0) to read from a file instead of the terminal. |
|
|
|
|
**Example:**
|
|
```bash
|
|
echo "Hello World" > greetings.txt
|
|
echo "Second line" >> greetings.txt
|
|
cat < greetings.txt
|
|
```
|
|
|
|
**How it works:**
|
|
The shell uses `sys_open` to obtain a handle for the target file, then uses `sys_dup2` to replace the process's standard FD (0 or 1) with the new file handle. This ensures the command's standard library calls (like `printf` or `scanf`) interact with the file instead of the terminal.
|
|
|
|
### Pipelines (`|`)
|
|
|
|
Pipelines connect the output of one command directly to the input of another.
|
|
|
|
**Usage:** `cmd1 | cmd2 | cmd3`
|
|
|
|
**Example:**
|
|
```bash
|
|
ls /bin | cat | cat
|
|
```
|
|
|
|
**How it works:**
|
|
The shell creates an anonymous pipe using `sys_pipe`, which returns two FDs: a read end and a write end.
|
|
- The shell duplicates the **write end** to FD 1 for the first command.
|
|
- The shell duplicates the **read end** to FD 0 for the second command.
|
|
- Both commands run in parallel, and the kernel manages the data buffer between them.
|
|
|
|
### Execution Control
|
|
|
|
| Operator | Name | Description |
|
|
| :--- | :--- | :--- |
|
|
| `;` | **Semicolon** | Executes commands sequentially. `cmd2` runs only after `cmd1` finishes. |
|
|
| `&&` | **Logical AND** | Executes `cmd2` only if `cmd1` returns a success status (exit code 0). |
|
|
| `||` | **Logical OR** | Executes `cmd2` only if `cmd1` fails (returns a non-zero exit code). |
|
|
|
|
**Example:**
|
|
```bash
|
|
# Compile and run only on success
|
|
make && ./boredos.elf
|
|
|
|
# Recover from a missing command
|
|
missing_tool || echo "Tool not found, using fallback"
|
|
```
|
|
|
|
### Background Execution (`&`)
|
|
|
|
Appending `&` to a command tells the shell not to wait for the process to complete before returning to the prompt.
|
|
|
|
**How it works:**
|
|
Normally, the shell calls `sys_waitpid` to block until a child process exits. With `&`, the shell skips this wait, allowing the process to run asynchronously while you continue using the terminal.
|
|
|
|
Operator precedence follows common POSIX shell rules:
|
|
1. Redirection and pipelines (`<`, `>`, `>>`, `|`)
|
|
2. Conditionals (`&&`, `||`)
|
|
3. List separators (`;`, `&`)
|
|
|
|
### Bsh Configuration
|
|
|
|
Bsh loads its configuration from:
|
|
|
|
`/Library/bsh/bshrc`
|
|
|
|
This file is similar to `.zshrc` or `.bashrc` and can define:
|
|
- `PATH` for command lookup
|
|
- `STARTUP` for interactive shell startup scripts
|
|
- `BOOT_SCRIPT` for a once-per-boot script
|
|
- prompt templates (`PROMPT_LEFT`, `PROMPT_RIGHT`)
|
|
|
|
Prompt tokens:
|
|
- `%n` username
|
|
- `%h` hostname
|
|
- `%~` cwd ("~" for `/root`)
|
|
- `%T` time (HH:MM)
|
|
|
|
Example:
|
|
|
|
```
|
|
PATH=/bin:/root/Apps
|
|
PROMPT_LEFT=%n@%h:%~$
|
|
STARTUP=/Library/bsh/startup.bsh
|
|
BOOT_SCRIPT=/Library/bsh/boot.bsh
|
|
```
|
|
|
|
## Common Commands
|
|
|
|
Below are some of the most used commands available in `/bin`:
|
|
|
|
| Command | Description |
|
|
| :--- | :--- |
|
|
| `ls` | List files and directories in the current path. |
|
|
| `cd` | Change the current working directory. |
|
|
| `cat` | Display the contents of a file. |
|
|
| `rm` | Remove a file. |
|
|
| `mkdir` | Create a new directory. |
|
|
| `man` | View the manual for a specific command (e.g., `man ls`). |
|
|
| `lsblk` | List block devices and partitions. |
|
|
| `du` | Report disk usage for files and directories. |
|
|
| `sysfetch` | Display system information and BoredOS branding. |
|
|
| `time` | Measure command execution time. |
|
|
|
|
|
|
---
|
|
[Return to Documentation Index](../README.md)
|