You accidentally catted a binary file and now your terminal shows strange characters, wrong colors, or doesn't echo what you type. The shell is fine — the terminal's display state is what actually broke.
Full-screen terminal applications like htop and vim don't just print text — they take over the entire screen, redraw parts of it selectively, and read your keystrokes one at a time. Here's the layer that makes that possible.
Re-running the last command with sudo, or fuzzy-searching back through everything you've typed today, both rely on the same underlying mechanism — a persisted, indexed log of your previous commands.
Born August 28, 2009 as a way to get his own team using Zsh, Oh My Zsh grew into the most widely used Zsh configuration framework — with its original robbyrussell theme still recognizable to millions of terminal users today.
Ubuntu 6.10 switched its default /bin/sh from Bash to the much stricter Dash in October 2006, purely for faster boot-time script execution — and immediately surfaced years of accumulated non-portable shell scripts across the ecosystem.
An unquoted variable works fine in testing, then silently breaks in production the first time it holds a value with a space in it. This is the single most common category of real-world shell scripting bug.
Announced June 4, 2019, the switch from Bash to Zsh as macOS's default shell traced back to a licensing constraint, not a technical judgment about which shell was better — Apple was stuck on an old, GPLv2 Bash version indefinitely.
Pressing Tab and getting a sensible list of filenames, commands, or flags looks simple from the outside. Underneath, it's a programmable system matching the word you're typing against rules specific to the command you're running.
Released February 13, 2005 by Swedish developer Axel Liljencrantz, Fish chose sensible-by-default behavior and built-in syntax highlighting over POSIX compatibility — a genuinely different bet than Bash or Zsh made.
'Terminal' and 'shell' get used interchangeably constantly, but they're genuinely separate programs with separate jobs — one draws characters on screen and manages input, the other interprets commands.