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

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Why Zsh is Cooler than Your Shell


By Brendon Rapp …

By Brendon Rapp
Jaguar Design Studio
January 2013 Cave Lunch

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • thank you very much
    Are you sure you want to
    Your message goes here
  • At slide 9: I bet that today it can be accomplished with less lines using awk.

    At slide 24: :)

    At slide 25: It reminds me the prompter of Cisco's iOS, but replacing TAB with '?'

    At slide 28: The last paragraph is a fallacy, is like I use a distro with bash with steroids and say that because of that, bash is better that zsh. Just playing devil's advocate here.

    At Slide 37: It is supposed to work? as I can see it, it is a merit of zsh, not necessarily a weakness of bash. I'll take it as a joke.

    At slide 39: have to try it to comment.

    At slide 41: Same as slide 37. This comes to my mind:

    At slide 48: In the future might cause trouble to the careless, it would be good a option like '[nyae]' of spelling correction.

    The rest, EXCELENT! enough to motivate me to install it and give it a chance, I just can say that I like what I saw in the distro GRML.

    Thanks for sharing.
    Are you sure you want to
    Your message goes here
  • @Kevin Rowe
    This will simply give the last line
    And yes I know I can do:
    shell$ cat `locate .blah blah |tail blah`
    But that just is too much typing
    What I'm talking about is zsh loading the output lines in variable that I can just call with a few keystrokes
    Are you sure you want to
    Your message goes here
  • @rumcho locate /a/b/c/|tail -n 1

    BTW, this is not zsh specific. It should work anywhere.
    Are you sure you want to
    Your message goes here
  • Question for all the zshell gurus:
    Let's say I do:
    shell$ locate
    Now that I got the prompt back, I'd like to 'cat' the last found file '/x/y/z/cde/' but I don't want to lift my hand off the keyboard, reach for the mouse, highlight the desired file and copy/paste it at the prompt. I just want to do something like:
    shell$ cat ${???magic???}
    where ${???magic???} would store the last output line of the last command I executed (i.e. the last line of the 'locate' command)
    Is there such a thing in zshell?
    Are you sure you want to
    Your message goes here
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