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

610,238
views

Published on

By Brendon Rapp …

By Brendon Rapp
Jaguar Design Studio
January 2013 Cave Lunch


20 Comments
373 Likes
Statistics
Notes
No Downloads
Views
Total Views
610,238
On Slideshare
0
From Embeds
0
Number of Embeds
233
Actions
Shares
0
Downloads
850
Comments
20
Likes
373
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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