<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Daniel Cosenza&apos;s Blog — Shell &amp; Terminal</title><description>Bash, Zsh, sh, tcsh, and the TUI tools built on top of them — prompts, scripting, multiplexers, and terminal troubleshooting.</description><link>https://danielcosenza.com/</link><language>en-us</language><lastBuildDate>Fri, 17 Jul 2026 00:00:00 GMT</lastBuildDate><atom:link href="https://danielcosenza.com/categories/shell/rss.xml" rel="self" type="application/rss+xml"/><item><title>Command Substitution vs Process Substitution</title><link>https://danielcosenza.com/posts/sh-command-vs-process-substitution/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-command-vs-process-substitution/</guid><description>$(command) captures text; &lt;(command) exposes a live stream as a path-like argument. Buffering, exit-status visibility, and portability differ sharply.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>bash</category><category>substitution</category><category>pipes</category></item><item><title>Environment Variables, Exports, and Subshell Boundaries</title><link>https://danielcosenza.com/posts/sh-environment-subshells/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-environment-subshells/</guid><description>Shell variables and the process environment overlap but differ. Export, fork/exec, subshells, pipelines, sourcing, and Shellshock define where changes survive.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>environment</category><category>subshell</category><category>posix</category></item><item><title>Fixing CRLF Line Endings in Shell Scripts</title><link>https://danielcosenza.com/posts/sh-fix-crlf-scripts/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-crlf-scripts/</guid><description>Errors like bad interpreter and $&apos;&apos;: command not found mean carriage returns reached a Unix shell script — confirm bytes, convert, enforce Git policy.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>crlf</category><category>git</category><category>scripting</category></item><item><title>Fixing Scripts That Work Interactively but Fail Under cron</title><link>https://danielcosenza.com/posts/sh-fix-cron-environment/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-cron-environment/</guid><description>cron starts jobs with a small, non-interactive environment — make paths, interpreters, working directories, and logging explicit rather than sourcing a login shell.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>cron</category><category>environment</category><category>automation</category></item><item><title>Fixing Locale and Encoding Failures in Shell Tools</title><link>https://danielcosenza.com/posts/sh-fix-locale-encoding/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-locale-encoding/</guid><description>Mojibake, invalid byte errors, and inconsistent sorting usually come from a locale mismatch — diagnose bytes and locale variables before converting anything.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>locale</category><category>encoding</category><category>unicode</category></item><item><title>Fixing a Shell Prompt That Hangs Inside Git Repositories</title><link>https://danielcosenza.com/posts/sh-fix-prompt-git-hang/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-prompt-git-hang/</guid><description>A prompt that&apos;s slow only inside repositories is usually running expensive Git status work on every redraw — profile it, isolate repository scale, cache safely.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>prompt</category><category>git</category><category>performance</category></item><item><title>Fixing SSH Agent Forwarding Without Exposing More Than Necessary</title><link>https://danielcosenza.com/posts/sh-fix-ssh-agent-forwarding/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-ssh-agent-forwarding/</guid><description>When forwarded SSH authentication fails, trace the socket, agent keys, server policy, and hop-by-hop configuration, then decide if forwarding is justified.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>ssh</category><category>agent-forwarding</category><category>security</category></item><item><title>How to Build a Cross-Shell Dotfiles Repository</title><link>https://danielcosenza.com/posts/sh-howto-cross-shell-dotfiles/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-cross-shell-dotfiles/</guid><description>Separate shared environment, shell-specific syntax, secrets, and machine-local state, then deploy links idempotently and make rollback intentional.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>dotfiles</category><category>bash</category><category>zsh</category></item><item><title>How to Evaluate a Modern Shell Without Breaking Your Workflow</title><link>https://danielcosenza.com/posts/sh-howto-evaluate-modern-shell/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-evaluate-modern-shell/</guid><description>Test Fish, Nushell, or another shell as an interactive tool first: inventory compatibility, isolate configuration, benchmark real tasks, keep a recovery shell.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>nushell</category><category>fish</category><category>migration</category></item><item><title>How to Build a Reusable Shell Function Library</title><link>https://danielcosenza.com/posts/sh-howto-function-library/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-function-library/</guid><description>A maintainable shell library needs a documented target shell, namespaced functions, no import-time surprises, and tests run in fresh processes.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>functions</category><category>library</category><category>scripting</category></item><item><title>How to Use Named Pipes and Process Substitution Safely</title><link>https://danielcosenza.com/posts/sh-howto-named-pipes/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-named-pipes/</guid><description>FIFOs connect unrelated processes through a filesystem name; process substitution makes similar streams temporary, and both need careful failure handling.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>fifo</category><category>pipes</category><category>process-substitution</category></item><item><title>How to Keep a Shell Script ShellCheck-Clean from the Start</title><link>https://danielcosenza.com/posts/sh-howto-shellcheck-clean/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-shellcheck-clean/</guid><description>Choose the target shell, quote data, model arrays and pipelines correctly, and use focused ShellCheck directives only when genuinely needed.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>shellcheck</category><category>scripting</category><category>quality</category></item><item><title>How to Configure SSH Connection Multiplexing</title><link>https://danielcosenza.com/posts/sh-howto-ssh-multiplexing/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-ssh-multiplexing/</guid><description>OpenSSH can reuse one authenticated transport for later sessions — configure a private control socket, bounded persistence, and explicit cleanup.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>ssh</category><category>multiplexing</category><category>performance</category></item><item><title>eza Continued exa&apos;s Modern ls Experiment</title><link>https://danielcosenza.com/posts/sh-news-eza-fork/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-eza-fork/</guid><description>After exa became unmaintained, the community fork eza carried its Rust-based, Git-aware directory listing interface forward under active, ongoing stewardship.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>eza</category><category>exa</category><category>rust</category></item><item><title>Nushell 0.114 Keeps Structured Shell Pipelines Moving Toward 1.0</title><link>https://danielcosenza.com/posts/sh-news-nushell-0114/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-nushell-0114/</guid><description>Nushell released version 0.114 in July 2026, remaining deliberately pre-1.0 while its table-oriented, structured-data pipeline model continues to evolve.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>nushell</category><category>structured-data</category><category>release</category></item><item><title>PowerShell Became Open Source and Cross-Platform in 2016</title><link>https://danielcosenza.com/posts/sh-news-powershell-open-source/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-powershell-open-source/</guid><description>Microsoft&apos;s August 2016 announcement put PowerShell on GitHub and introduced it on Linux and macOS, changing its scope well beyond Windows administration.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>powershell</category><category>open-source</category><category>history</category></item><item><title>tmux 3.0 Arrived in 2019</title><link>https://danielcosenza.com/posts/sh-news-tmux-30/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-tmux-30/</guid><description>tmux 3.0 shipped in late 2019 with changes from its normal development process — the major version bump was not a promise of semantic-versioning upheaval.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>tmux</category><category>terminal</category><category>release</category></item><item><title>How GNU Readline Turns Keystrokes into Shell Commands</title><link>https://danielcosenza.com/posts/sh-readline-line-editing/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-readline-line-editing/</guid><description>Interactive Bash editing is a library-driven state machine: keymaps, completion hooks, history, and terminal escapes all meet inside GNU Readline.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>readline</category><category>bash</category><category>terminal</category></item><item><title>Shell Signal Handling: trap, Cleanup, and Process Groups</title><link>https://danielcosenza.com/posts/sh-signal-handling-trap/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-signal-handling-trap/</guid><description>Reliable shell cleanup requires understanding signals, traps, process groups, and the important difference between a normal exit and an uncatchable termination.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>signals</category><category>trap</category><category>scripting</category></item><item><title>How Terminal Multiplexers Keep Sessions Alive</title><link>https://danielcosenza.com/posts/sh-terminal-multiplexer-internals/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-terminal-multiplexer-internals/</guid><description>PTYs and a persistent server process explain how tmux and screen survive a dropped SSH connection, not just several shells in one window.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>tmux</category><category>pty</category><category>terminal</category></item><item><title>Fixing a Terminal That Shows Garbled Output or Invisible Text</title><link>https://danielcosenza.com/posts/sh-fix-garbled-terminal-output/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-garbled-terminal-output/</guid><description>After accidentally catting a binary file, the terminal shows strange characters or wrong colors — the shell is fine, the terminal&apos;s display state is what broke.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>terminal</category><category>stty</category><category>troubleshooting</category></item><item><title>Fixing Shell History That Doesn&apos;t Persist or Save Correctly</title><link>https://danielcosenza.com/posts/sh-fix-history-not-persisting/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-history-not-persisting/</guid><description>Commands seem to vanish between sessions, or history from multiple terminals overwrites instead of combining — how history writing works and the fix for each.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>history</category><category>bash</category><category>zsh</category></item><item><title>Fixing Slow Shell Startup Time in Bash or Zsh</title><link>https://danielcosenza.com/posts/sh-fix-slow-shell-startup/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-slow-shell-startup/</guid><description>Opening a new terminal tab shouldn&apos;t take a visibly annoying second or two — how to find which specific config line is responsible, rather than guessing.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>performance</category><category>bash</category><category>zsh</category></item><item><title>Fixing Wrong or Missing Colors in Windows Terminal When Using WSL</title><link>https://danielcosenza.com/posts/sh-fix-wsl-terminal-colors/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-wsl-terminal-colors/</guid><description>Wrong or missing colors specifically inside Windows Terminal connected to WSL, even though the same shell config looks fine over plain SSH.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>wsl</category><category>windows-terminal</category><category>colors</category></item><item><title>The History of the Unix Shell: From Thompson Shell to Bash and Zsh</title><link>https://danielcosenza.com/posts/sh-history/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-history/</guid><description>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.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>history</category><category>unix</category><category>bash</category><category>zsh</category></item><item><title>How to Debug Shell Scripts With set -x and ShellCheck</title><link>https://danielcosenza.com/posts/sh-howto-debug-shellcheck/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-debug-shellcheck/</guid><description>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.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>debugging</category><category>shellcheck</category><category>bash</category></item><item><title>How to Use fzf for Fuzzy Finding in the Shell</title><link>https://danielcosenza.com/posts/sh-howto-fzf-fuzzy-finder/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-fzf-fuzzy-finder/</guid><description>Setting up fzf, a general-purpose fuzzy finder that plugs into history search, file finding, and practically any list-based shell workflow.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>fzf</category><category>fuzzy-finder</category></item><item><title>How to Write Robust, Portable POSIX Shell Scripts</title><link>https://danielcosenza.com/posts/sh-howto-posix-scripting/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-posix-scripting/</guid><description>Writing shell scripts that run correctly under any POSIX-compliant shell, not just whichever one happens to be installed on your own machine.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>posix</category><category>scripting</category><category>portability</category></item><item><title>How to Use screen as a Session-Persistence Tool</title><link>https://danielcosenza.com/posts/sh-howto-screen-multiplexer/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-screen-multiplexer/</guid><description>GNU screen is older and less feature-rich than tmux, but still genuinely useful, and often already pre-installed on systems where tmux isn&apos;t.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>screen</category><category>multiplexing</category></item><item><title>How to Configure a Custom Prompt With Starship</title><link>https://danielcosenza.com/posts/sh-howto-starship-prompt/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-starship-prompt/</guid><description>Installing Starship, a fast, shell-agnostic prompt that works identically across Bash, Zsh, and fish, and configuring which information it shows.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>starship</category><category>prompt</category></item><item><title>How to Set Up and Use tmux for Terminal Multiplexing</title><link>https://danielcosenza.com/posts/sh-howto-tmux-multiplexing/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-tmux-multiplexing/</guid><description>Running multiple shell sessions inside one terminal window, splitting panes, and, most importantly, keeping sessions alive across disconnects.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>tmux</category><category>multiplexing</category></item><item><title>How to Install and Use a TUI File Manager</title><link>https://danielcosenza.com/posts/sh-howto-tui-file-manager/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-tui-file-manager/</guid><description>Setting up a terminal-based file manager for navigating, previewing, and manipulating files entirely with the keyboard, without leaving the terminal.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>tui</category><category>file-manager</category></item><item><title>How to Set Up a TUI System Monitor</title><link>https://danielcosenza.com/posts/sh-howto-tui-system-monitor/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-tui-system-monitor/</guid><description>Installing and configuring a full-screen terminal system monitor for real-time CPU, memory, and process information, entirely keyboard-driven.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>tui</category><category>system-monitoring</category></item><item><title>How to Configure Windows Terminal for Use With WSL</title><link>https://danielcosenza.com/posts/sh-howto-windows-terminal-wsl/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-windows-terminal-wsl/</guid><description>Setting up Windows Terminal specifically for a smooth WSL experience: default profile, font, and the settings that most commonly need adjusting.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>windows-terminal</category><category>wsl</category></item><item><title>How to Set Up Zsh With Oh My Zsh</title><link>https://danielcosenza.com/posts/sh-howto-zsh-oh-my-zsh-setup/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-zsh-oh-my-zsh-setup/</guid><description>Installing Zsh as your shell, setting up Oh My Zsh, and configuring a theme and a first useful plugin, from a default shell to a productive one.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>zsh</category><category>oh-my-zsh</category></item><item><title>Job Control: How Shells Manage Foreground and Background Processes</title><link>https://danielcosenza.com/posts/sh-job-control/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-job-control/</guid><description>Ctrl-Z, bg, fg, and a trailing &amp; all touch one mechanism: process groups and Unix signals deciding which process can read your terminal.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>job-control</category><category>processes</category><category>signals</category></item><item><title>Bash 4.0 Ships With Associative Arrays and Coprocesses</title><link>https://danielcosenza.com/posts/sh-news-bash-4-released/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-bash-4-released/</guid><description>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.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>bash</category><category>release</category></item><item><title>Brian Fox Releases Bash, a Free Alternative to Proprietary Unix Shells</title><link>https://danielcosenza.com/posts/sh-news-bash-released/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-bash-released/</guid><description>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.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>bash</category><category>gnu</category><category>history</category></item><item><title>Bill Joy&apos;s C Shell Ships as Part of 2BSD, Introducing Command History</title><link>https://danielcosenza.com/posts/sh-news-csh-2bsd/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-csh-2bsd/</guid><description>Distributed starting with 2BSD in 1979, Bill Joy&apos;s C shell introduced command history and aliases — features nearly every shell released since has copied.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>csh</category><category>bsd</category><category>history</category></item><item><title>Fish Ships as a Shell That Deliberately Breaks From POSIX</title><link>https://danielcosenza.com/posts/sh-news-fish-released/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-fish-released/</guid><description>Released February 13, 2005 by Swedish developer Axel Liljencrantz, Fish chose sensible-by-default behavior and built-in syntax highlighting over POSIX compatibility.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>fish</category><category>history</category></item><item><title>How macOS Catalina Changed Zsh&apos;s Place in the Shell Ecosystem</title><link>https://danielcosenza.com/posts/sh-news-macos-zsh-default/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-macos-zsh-default/</guid><description>Catalina made zsh a mainstream interactive default; this account separates that ecosystem effect from macOS fleet migration and script compatibility.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>macos</category><category>zsh</category><category>apple</category></item><item><title>Robby Russell Releases Oh My Zsh to Share His Own Config With Coworkers</title><link>https://danielcosenza.com/posts/sh-news-oh-my-zsh-created/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-oh-my-zsh-created/</guid><description>Born August 28, 2009 to get his own team using Zsh, Oh My Zsh grew into the most widely used Zsh configuration framework in daily use today.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>zsh</category><category>oh-my-zsh</category></item><item><title>Ubuntu Adopts Dash as Default /bin/sh, Exposing Bashisms Everywhere</title><link>https://danielcosenza.com/posts/sh-news-ubuntu-dash-default/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-ubuntu-dash-default/</guid><description>Ubuntu 6.10 switched its default /bin/sh from Bash to the stricter Dash in October 2006 for faster boot times, surfacing years of non-portable scripts.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>dash</category><category>ubuntu</category><category>posix</category></item><item><title>Paul Falstad Releases Zsh, Combining Ideas From ksh, tcsh, and rc</title><link>https://danielcosenza.com/posts/sh-news-zsh-created/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-zsh-created/</guid><description>Posted to Usenet by a Princeton student in 1990, Zsh combined the strongest interactive features of several existing shells, decades before becoming macOS&apos;s default.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>zsh</category><category>history</category></item><item><title>Bash vs. Zsh vs. sh: What Actually Differs Between POSIX Shells</title><link>https://danielcosenza.com/posts/sh-posix-compare/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-posix-compare/</guid><description>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.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>bash</category><category>zsh</category><category>posix</category></item><item><title>How Shell Prompt Customization Actually Works</title><link>https://danielcosenza.com/posts/sh-prompt-customize/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-prompt-customize/</guid><description>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.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>prompt</category><category>bash</category><category>zsh</category></item><item><title>Shell Scripting Pitfalls: Quoting, Word Splitting, and Why $var Isn&apos;t Always Safe</title><link>https://danielcosenza.com/posts/sh-quoting-pitfalls/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-quoting-pitfalls/</guid><description>An unquoted variable works in testing, then silently breaks the first time its value contains a space — the single most common shell scripting bug.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>quoting</category><category>scripting</category><category>bash</category></item><item><title>Terminal Emulators vs. Shells: What Each One Actually Does</title><link>https://danielcosenza.com/posts/sh-terminal-emulator/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-terminal-emulator/</guid><description>Terminal and shell are separate programs linked by a kernel pty: one renders characters and handles input, the other interprets commands.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>terminal</category><category>pty</category><category>shell</category></item><item><title>What Makes a Terminal &apos;TUI-Capable&apos;: ncurses, terminfo, and Raw Mode</title><link>https://danielcosenza.com/posts/sh-tui-ncurses/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-tui-ncurses/</guid><description>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.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>tui</category><category>ncurses</category><category>terminal</category></item><item><title>How Shell Expansion and Globbing Actually Work</title><link>https://danielcosenza.com/posts/sh-expansion-globbing/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-expansion-globbing/</guid><description>Bash rewrites typed commands through an ordered sequence of expansions before running them. The exact order explains most quoting and globbing surprises.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>bash</category><category>globbing</category><category>expansion</category></item><item><title>Fixing &apos;Broken Pipe&apos; Errors in Shell Scripts and Pipelines</title><link>https://danielcosenza.com/posts/sh-fix-broken-pipe-sigpipe/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-broken-pipe-sigpipe/</guid><description>A command mid-pipeline dies with &apos;Broken pipe,&apos; often only when piped into head — a specific, well-defined signal, not a random failure.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>pipes</category><category>signals</category><category>scripting</category></item><item><title>Fixing a Broken Prompt Theme After an Update</title><link>https://danielcosenza.com/posts/sh-fix-broken-prompt-theme/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-broken-prompt-theme/</guid><description>A prompt showing broken characters or startup errors after a theme update — how to isolate whether it&apos;s a font, config, or version issue.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>prompt</category><category>zsh</category><category>troubleshooting</category></item><item><title>Fixing &apos;Command Not Found&apos; Right After Installing Something</title><link>https://danielcosenza.com/posts/sh-fix-command-not-found-path/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-command-not-found-path/</guid><description>A tool you just installed is definitely on disk, but the shell insists it doesn&apos;t exist — almost always a PATH problem, with only a few actual explanations.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>path</category><category>troubleshooting</category><category>bash</category></item><item><title>Fixing SSH Sessions That Don&apos;t Know the Terminal&apos;s Actual Size</title><link>https://danielcosenza.com/posts/sh-fix-ssh-terminal-size/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-ssh-terminal-size/</guid><description>TUI apps render clipped over SSH, or the terminal doesn&apos;t rewrap after resizing — the remote shell has a stale idea of the terminal&apos;s actual dimensions.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>ssh</category><category>terminal</category><category>tmux</category></item><item><title>Fixing tmux Keybinding Conflicts With Your Terminal or Shell</title><link>https://danielcosenza.com/posts/sh-fix-tmux-keybinding-conflicts/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-fix-tmux-keybinding-conflicts/</guid><description>A shortcut that works outside tmux does something different, or nothing, inside a session — how the prefix key and keybinding layers interact.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>fix</category><category>tmux</category><category>keybindings</category><category>troubleshooting</category></item><item><title>History Expansion and Search: How !!, Ctrl-R, and Shell History Files Actually Work</title><link>https://danielcosenza.com/posts/sh-history-search/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-history-search/</guid><description>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.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>history</category><category>bash</category><category>zsh</category></item><item><title>How to Set Up Shell Aliases and Functions Properly</title><link>https://danielcosenza.com/posts/sh-howto-aliases-functions/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-aliases-functions/</guid><description>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.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>aliases</category><category>functions</category><category>bash</category></item><item><title>How to Use a TUI Git Client</title><link>https://danielcosenza.com/posts/sh-howto-tui-git-client/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-howto-tui-git-client/</guid><description>Setting up a terminal-based git interface for staging, committing, browsing history, and resolving conflicts visually without leaving the terminal.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>howto</category><category>git</category><category>tui</category></item><item><title>Shellshock: A 25-Year-Old Bash Bug Becomes a Global Emergency Patch</title><link>https://danielcosenza.com/posts/sh-news-shellshock/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-news-shellshock/</guid><description>Disclosed September 24, 2014, Shellshock let attackers run arbitrary commands via a Bash environment-variable flaw, with botnets scanning for targets within hours.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>news</category><category>bash</category><category>security</category><category>shellshock</category></item><item><title>How Tab Completion Actually Works in Bash and Zsh</title><link>https://danielcosenza.com/posts/sh-tab-completion/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-tab-completion/</guid><description>Pressing Tab and getting a sensible list looks simple. Underneath, Bash and Zsh implement a programmable system matching rules specific to each command.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>completion</category><category>bash</category><category>zsh</category></item><item><title>tcsh and csh: Why FreeBSD&apos;s Shell Heritage Isn&apos;t POSIX</title><link>https://danielcosenza.com/posts/sh-tcsh-freebsd/</link><guid isPermaLink="true">https://danielcosenza.com/posts/sh-tcsh-freebsd/</guid><description>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.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>Shell &amp; Terminal</category><category>deep-dive</category><category>tcsh</category><category>csh</category><category>freebsd</category></item></channel></rss>