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:

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:

  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.

Return to Documentation Index