Your SlideShare is downloading. ×
Why Zsh is Cooler than Your Shell
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Why Zsh is Cooler than Your Shell


Published on

By Brendon Rapp …

By Brendon Rapp
Jaguar Design Studio
January 2013 Cave Lunch

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. whyZ shell (zsh)is coolerthanyour shell Brendon Rapp - Cave Lunch #1
  • 2. whyZ shell (zsh)is coolerthanyour shell(unless your shell is zsh) Brendon Rapp - Cave Lunch #1
  • 3. (alternate title)she sellsZ shellsby thesea shore
  • 4. Donald KnuthProfessor Emeritus ofComputer Science atStanfordAuthor of The Art ofComputer Programming"Father of algorithmicanalysis"Creator of TeX
  • 5. In 1986, Knuth was asked to write a guestfeature for the "Programming Pearls" column inthe Communications of the ACM journal.The task was to write a program that would:read a file of text, determine the n mostfrequently used words, and print out a sortedlist of those words along with their frequencies.
  • 6. Knuth produced a solution in Pascal that, whenprinted, was about 10 pages in length. It waswell designed, thoroughly commented, andused a novel data structure for managing theword count list.
  • 7. In response, Doug McIlroy wrote a shell scriptthat produced the same output.
  • 8. In response, Doug McIlroy wrote a shell scriptthat produced the same output.McIlroys script was six lines long.
  • 9. Doug McIlroys Shell Scripttr -cs A-Za-z n |tr A-Z a-z |sort |uniq -c |sort -rn |sed ${1}q
  • 10. A brief history of shells1971: Thompson shell ● Ken Thompson, Bell Labs, first Unix shell ● interactive interpreter, not scripting environment1977: Bourne shell ● scripting language ● Version 7 Unix, PDP-11 ● 1984: The UNIX Programming Environment, Kernighan & Pike ● The shell of commercial Unixes ○ System V, AIX, HP-UX, SCO, Solaris, SunOS ○ Still the default on some of these (that are still alive) ● /bin/sh ○ compatibility mode in modern shells ○ symlink or hard link to compatible shells in modern Unixes
  • 11. A brief history of shells1978: C shell ● BSD Unix ● More "C-like" scripting syntax (kinda) ● Command history ● Aliasing ● tcsh - newer C shell, default on FreeBSD, and OS X systems 10.0-10.21983: Korn shell ● Bell Labs (AT&T) ● Proprietary until 2000 ● vi and emacs editing modes ● Lots of C shell features ● "middle road" between Bourne and C shell ● pdksh - default on OpenBSD
  • 12. A brief history of shells1989: Bourne Again shell (bash) ● GNU, GPL ● first legitimate Free shell (/bin/sh compatible) ○ shells like ksh and csh became Free only much later on ● standard shell for Linux distros, Mac OS X 10.3+ ● TAB completion ● extended scripting syntax1990: Z shell ● most closely resembles Korn shell ● /bin/bash compatibility, drop-in replacement for Bash ● "new" (despite being over 20 years old) ● awesome stuff Ill talk about next
  • 13. Why use zsh?
  • 14. First, a reason thats kind of lame...
  • 15. If youre using Mac OS X...
  • 16. ... your Bash is old!(OS X 10.8.2... and many earlier OS X versions too)
  • 17. OS X: GPL Wasteland● no GPLv3 on OS X● OS X bash: final version released as GPLv2● Homebrew has latest Bash (but many use situation as an excuse to try zsh instead)
  • 18. Examples of Actual Zsh Awesomeness
  • 19. zsh: cd completion
  • 20. zsh: cd completion
  • 21. zsh: cd completion
  • 22. bash: cd completion
  • 23. bash: cd completion
  • 24. bash: cd completion
  • 25. zsh: git completion
  • 26. zsh: git completion
  • 27. bash: git completion
  • 28. bash: git completionIts possible to get completion for git (and many other commands) in Bashby installing bash-completion package, but the completion is stillrudimentary compared to zsh: ● no cycling through options with repeated tabs ● no accompanying info with commands, just a list ● breaks to new prompt line on each tab instead of updating in-placeThere may be ways to improve that situation and bring it more in line withzsh, but with zsh, you get it basically out-of-the-box, with a single commandin your .zshrc to enable completions.
  • 29. zsh: path expansion (hit TAB, and then...)
  • 30. zsh: path expansion (... the path is expanded in place, provided there is only one path matching that pattern)
  • 31. zsh: path expansion (If there isnt only one distinct match for the pattern...)
  • 32. zsh: path expansion(... the first TAB will expand up until it hits an ambiguity... )
  • 33. zsh: path expansion (... the next TAB lists the possible matches... )
  • 34. zsh: path expansion (... then TAB begins cycling through the possibilities... )
  • 35. zsh: path expansion (... until you get to the one you want, and hit the Right arrow to "select" it ... )
  • 36. zsh: path expansion (... and then TAB resumes matching through the rest of the path)
  • 37. bash: path expansion? (hit TAB ... nothing)
  • 38. zsh: path replacement (Whoops. I meant /usr/local/share)
  • 39. zsh: path replacement
  • 40. zsh: path replacement (no more "cd ../../../")
  • 41. bash: path replacement?
  • 42. zsh: right promptPROMPT (or PS1): left prompt (like bash)RPROMPT (or RPS1): right prompt!
  • 43. zsh: right prompt
  • 44. zsh: spelling correction
  • 45. zsh: spelling correction
  • 46. zsh: spelling correction
  • 47. zsh: aliasesNormal aliases:alias ls=ls --color=auto
  • 48. zsh: aliasesGlobal aliases - appear anywhere in commandstringalias -g gp=| grep -i% ps ax gp ruby=> ps ax | grep -i ruby
  • 49. zsh: aliasesSuffix aliases - "Open With..."alias -s rb=vimalias -s log="less -MN"alias -s html=chromium% user.rb=> vim user.rb% development.log=> less -MN development.log% index.html=> chromium index.html
  • 50. zsh: extended globbingNormal globbed search
  • 51. zsh: extended globbingExtended globbed search: **/ = recursive
  • 52. zsh: environment variable editing
  • 53. zsh: programmable file renaming
  • 54. zsh-history-substring-searchDown arrow = cycle through command history
  • 55. zsh-history-substring-searchType part of command and hit up arrow, cycle through onlycommands that begin with that string
  • 56. zsh-syntax-highlightingHighlights valid commands in green, invalid commands inredSupports shell commands as well as executables in $PATH
  • 57. oh-my-zsh
  • 58. Other zsh bullet points● Simple configuration style● Shared history ○ simple & fast, requires some monkeying to replicate in bash● Lots of additions for shell scripting● Output redirection to multiple destinationsAnd, apparently, plenty of other stuff deeper than Ivegotten so far.
  • 59. The End Go 49ers