Command Substitution vs Process Substitution
$(command) captures text; <(command) exposes a live stream as a path-like argument. Buffering, exit-status visibility, and portability differ sharply.
tag
19 posts
$(command) captures text; <(command) exposes a live stream as a path-like argument. Buffering, exit-status visibility, and portability differ sharply.
Separate shared environment, shell-specific syntax, secrets, and machine-local state, then deploy links idempotently and make rollback intentional.
Interactive Bash editing is a library-driven state machine: keymaps, completion hooks, history, and terminal escapes all meet inside GNU Readline.
An operational account of Catalina's zsh default: which accounts changed, what stayed on Bash, and how administrators could migrate without breaking scripts.
Commands seem to vanish between sessions, or history from multiple terminals overwrites instead of combining — how history writing works and the fix for each.
Opening a new terminal tab shouldn't take a visibly annoying second or two — how to find which specific config line is responsible, rather than guessing.
Every shell in daily use today descends from a 1971 command interpreter, branching through PWB, Bourne, and C shell into the families still visible now.
The two essential shell debugging tools: one traces exactly what a script actually executes, the other catches whole categories of bugs before it ever runs.
Announced by maintainer Chet Ramey on February 20, 2009, Bash 4.0 added key-value associative arrays and other features scripters had requested for years.
Released as beta version .99 on June 8, 1989, Bash was built for the GNU Project as a free replacement for the Bourne shell and other proprietary Unix shells.
Bash, Zsh, and sh accept most of the same commands, which is exactly what makes their real differences easy to miss until a script breaks.
A colorful prompt showing git branch and exit code is not a separate program — it is a string the shell re-evaluates before every command.
An unquoted variable works in testing, then silently breaks the first time its value contains a space — the single most common shell scripting bug.
Bash rewrites typed commands through an ordered sequence of expansions before running them. The exact order explains most quoting and globbing surprises.
A tool you just installed is definitely on disk, but the shell insists it doesn't exist — almost always a PATH problem, with only a few actual explanations.
Re-running the last command with sudo and fuzzy-searching everything typed today both rely on the same persisted, indexed log the shell writes to disk.
The actual difference between an alias and a function, when each is the right tool, and how to avoid the mistakes that make aliases behave unpredictably.
Disclosed September 24, 2014, Shellshock let attackers run arbitrary commands via a Bash environment-variable flaw, with botnets scanning for targets within hours.
Pressing Tab and getting a sensible list looks simple. Underneath, Bash and Zsh implement a programmable system matching rules specific to each command.