My tentative introductory guide to navigating a shell interface (assuming Bash). 🚧 These are rough notes meant for guiding in-person discussions; they are somewhat terse. 🚧 * Moving around, invoking stuff With a file browser and a terminal emulator side-by-side: - ls, cd, mkdir, touch, rm; "/" = root - globs - arguments vs options (e.g. ls, diff) - man, --help - standard input/output/error: pipes, redirection - writing scripts (shebangs: see bash(1) § COMMAND EXECUTION) * Shell language - ; & (e.g. sleep) - && || (e.g. grep) - if, for - $? (e.g. grep, diff) - [ - variables - functions, $@, $1… - black-box model of a command: - inputs: stdin, arguments, environment - outputs: stdout, stderr, exit code - side-effects: I/O, e.g. files, network - which, type: keyword ≠ builtin ≠ function ≠ program - valar quotulis (valar escaepis); e.g. sort operator: [ foo '>' bar ] * Advanced - ( ) ≠ { }: try to set variables, or call exit - (( )), $( ) - glob ≠ regex - bash extensions - [[ - <( ) - |&, >& - arrays - job control: fg, bg, jobs, wait, kill, C-z