Skip to content
LeoTM edited this page Dec 11, 2025 · 46 revisions
  • (non)login
  • (non)interactive
  • 1971 Thompson shell
  • 1975 PWB (aka Mashey) shell
  • 1978 C shell (C)
    • .login, .cshrc
  • 1979 Bourne shell (C, macros like ALGOL 68)
    • .profile
  • 1980 COMMAND.COM (x86 assembly)
  • 1981 TENEX C shell (C)
  • 1983 Korn shell (C)
    • .kshrc
  • 1988 Hamilton C shell (C)
  • 1989 Almquist shell (C)
  • 1989 rc Unix shell (Hare) πŸ‡
  • 1989 Bourne Again shell aka Bash πŸ“¦ (C) Linux, macOS (old), Windows (WSL, Git for Windows) Bash vs Bourne
    • .bash_profile, .bashrc
  • 1990 Z shell (C) macOS (new) comparisons
    • .zshenv β†’ .zprofile β†’ .zshrc β†’ .zlogin β†’ .zlogout
    • frameworks
      • Oh My Zsh (Shell) why
      • Starship (Rust)
      • Antigen (Shell, Perl)
      • Prezto
      • zplug
      • zen
      • Antidote (Shell)
  • 1993 Command Prompt aka cmd.exe (C, C++) Windows (old)
  • 1997 Debian Almquist Shell aka Dash (C)
  • 2005 Fish (Rust) 🐟
  • 2006 PowerShell (C#, PowerShell) Windows (new) Windows Terminal
  • 2019 Nu shell (Rust) ✨
  • 2025 ? create first agentic shell too late πŸ˜†
  • 2025 Flux159/agentic-shell πŸ”₯ 1yo
  • 2025 mikecvet/nl-sh wrapper πŸ”₯ 1yo
  • 2025 TODO: create new MAINTAINED agentic shell
  • 202? β“βš‘πŸ’‘
# M2 Pro, Darwin 25, macOS 26

> cat /etc/shells                   
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

# ---

> sh --help            
GNU bash, version 3.2.57(1)-release-(arm64-apple-darwin25)
# ...

> bash --help          
GNU bash, version 3.2.57(1)-release-(arm64-apple-darwin25)
# ...

> ls -i /bin/sh /bin/bash
1152921500312554102 /bin/bash	1152921500312554156 /bin/sh

> file -h /bin/sh /bin/bash
/bin/sh:   Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/bin/sh (for architecture x86_64):	Mach-O 64-bit executable x86_64
/bin/sh (for architecture arm64e):	Mach-O 64-bit executable arm64e
/bin/bash: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/bin/bash (for architecture x86_64):	Mach-O 64-bit executable x86_64
/bin/bash (for architecture arm64e):	Mach-O 64-bit executable arm64e

# i.e. same but 2 diff files:
# If Bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.
# https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Invoked-with-name-sh

Clone this wiki locally