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: Runcmd2aftercmd1.cmd1 && cmd2: Runcmd2only ifcmd1succeeds.cmd1 || cmd2: Runcmd2only ifcmd1fails.
- 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:
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:
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). |
| ` | ` |
Example:
# 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:
- Redirection and pipelines (
<,>,>>,|) - Conditionals (
&&,||) - List separators (
;,&)
Bsh Configuration
Bsh loads its configuration from:
/Library/bsh/bshrc
This file is similar to .zshrc or .bashrc and can define:
PATHfor command lookupSTARTUPfor interactive shell startup scriptsBOOT_SCRIPTfor a once-per-boot script- prompt templates (
PROMPT_LEFT,PROMPT_RIGHT)
Prompt tokens:
%nusername%hhostname%~cwd ("~" for/root)%Ttime (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. |