Apple Replaces Bash With Zsh as macOS's Default Shell
The June 2019 WWDC announcement that Catalina would ship with zsh as the default login shell, and why an old GPL licensing decision, not a technical preference, actually drove the change.
tag
13 posts
The June 2019 WWDC announcement that Catalina would ship with zsh as the default login shell, and why an old GPL licensing decision, not a technical preference, actually drove the change.
Commands from an earlier session seem to vanish, or history from multiple open terminals overwrites itself instead of combining. Here's how history file writing actually works, and the specific settings that fix each symptom.
Opening a new terminal tab takes a visibly annoying second or two before you get a prompt. Here's how to actually find which specific line in your config is responsible, rather than guessing.
Every shell in daily use today — Bash, Zsh, tcsh, fish — descends from a lineage that started with a genuinely minimal 1971 command interpreter, branching twice into distinct, still-visible family trees.
A complete walkthrough installing Zsh as your shell, setting up Oh My Zsh, and configuring a theme and a first useful plugin — from a completely default shell to a genuinely productive one.
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.
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.
Posted to the alt.sources Usenet newsgroup by a Princeton student in 1990, Zsh combined the strongest interactive features of several existing shells — and, decades later, would become the default shell on macOS.
They all accept most of the same basic commands, which is exactly what makes their real differences easy to miss until a script written for one breaks silently on another.
That colorful prompt showing your git branch, exit code, and current directory isn't a separate program running alongside your shell — it's a string your shell re-evaluates before every single command.
Your carefully configured prompt suddenly shows broken characters, missing icons, or throws errors on every new shell after updating a theme or framework. Here's how to isolate whether it's a font, config, or version issue.
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.
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.