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.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Why Zsh is Cooler than Your Shell

592,740
views

Published on

By Brendon Rapp …

By Brendon Rapp
Jaguar Design Studio
January 2013 Cave Lunch


19 Comments
360 Likes
Statistics
Notes
  • Woot! Go Korn shell jajaja
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Very good slides
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • is there a video?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • thank you very much
       Reply 
    Are you sure you want to  Yes  No
    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: http://lh6.ggpht.com/-hPr86L8DlWQ/T9owGOYPI7I/AAAAAAAAJJc/WDcNzMb-YOM/2525D.jpg

    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.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
592,740
On Slideshare
0
From Embeds
0
Number of Embeds
226
Actions
Shares
0
Downloads
823
Comments
19
Likes
360
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