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
35 posts
$(command) captures text; <(command) exposes a live stream as a path-like argument. Buffering, exit-status visibility, and portability differ sharply.
Shell variables and the process environment overlap but differ. Export, fork/exec, subshells, pipelines, sourcing, and Shellshock define where changes survive.
Interactive Bash editing is a library-driven state machine: keymaps, completion hooks, history, and terminal escapes all meet inside GNU Readline.
Reliable shell cleanup requires understanding signals, traps, process groups, and the important difference between a normal exit and an uncatchable termination.
PTYs and a persistent server process explain how tmux and screen survive a dropped SSH connection, not just several shells in one window.
Ctrl-Z, bg, fg, and a trailing & all touch one mechanism: process groups and Unix signals deciding which process can read your terminal.
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.
Terminal and shell are separate programs linked by a kernel pty: one renders characters and handles input, the other interprets commands.
Full-screen terminal apps like htop and vim redraw the screen selectively and read keystrokes one at a time. This is the library layer that makes it possible.
A forensic account of the dot-com boom, its long collapse, and why real innovation coexisted with prices that outran plausible profits.
How IBM's rushed 5150 became a cloneable platform—and why published interfaces, an independent BIOS, and DOS all mattered.
How transistors, integrated circuits, memory, displays, batteries, and manufacturing—not one magic chip—made personal computing portable.
Each WSL2 distro lives inside a dynamically-expanding .vhdx file that grows with use but never shrinks back down automatically after deletions.
WSL distros reduce to a root filesystem tarball plus small registration metadata, which is exactly what makes import, export, and custom distros work.
WSLg runs a real Wayland compositor and audio server inside WSL, remoting individual application windows to Windows over RDP's RAIL protocol.
The specific interop layer that lets a WSL shell launch Windows executables and Windows shells launch Linux commands, translating paths and streams both ways.
WSL2 runs Microsoft's own open-source Linux kernel fork, patched for its virtualized environment and updated independently of any distro's kernel package.
WSL distros ran without systemd for years, breaking software expecting PID 1 init. Here is why that gap existed and how it was architecturally closed.
Bash rewrites typed commands through an ordered sequence of expansions before running them. The exact order explains most quoting and globbing surprises.
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.
Pressing Tab and getting a sensible list looks simple. Underneath, Bash and Zsh implement a programmable system matching rules specific to each command.
FreeBSD default shells did not evolve from the Bourne lineage behind Bash and Zsh — tcsh descends from a separate design built to feel more like C.
Trace ARPANET from NCP through TCP/IP, gateways and the 1983 transition—and correct the myth that one protocol simply swallowed every rival network.
Reconstruct Netscape's rise and Internet Explorer's distribution campaign using the Microsoft antitrust record, product history and Mozilla evidence.
What the preserved 1947 Mark II logbook proves about its famous moth, what later retellings invented, and what Hopper actually achieved.
How the 1988 Morris Worm spread through Unix systems, disrupted the young internet, drove CERT's creation, and led to a landmark US computer-crime conviction.
How Napster's centralized index enabled peer-to-peer music sharing, triggered landmark litigation, and forced the recording industry toward digital distribution.
Why the US video game crash was a market and distribution failure—not one bad cartridge—and how Nintendo rebuilt retailer and consumer trust.
How two-digit dates created genuine Y2K risk, what engineers repaired before 2000, and why the rollover's relative calm reflected successful prevention.
WSL's cross-OS file access translates between Linux and Windows filesystem semantics at the protocol level, and that translation has a real performance cost.
The specific GPU paravirtualization mechanism, built jointly by Microsoft and NVIDIA, that lets WSL2 run CUDA workloads at near-native performance.
WSL2's VM claims memory dynamically as Linux needs it and has historically been slow to release it back, plus what .wslconfig actually lets you control.
WSL2's original NAT networking isolates it from your LAN by default; mirrored mode, added later, takes a fundamentally different approach with real tradeoffs.