SlideShare a Scribd company logo
1 of 60
Download to read offline
why
Z shell (zsh)
is cooler
than
your shell
   Brendon Rapp - Cave Lunch #1
why
Z shell (zsh)
is cooler
than
your shell
(unless your shell is zsh)

        Brendon Rapp - Cave Lunch #1
(alternate title)

she sells
Z shells
by the
sea shore
Donald Knuth
Professor Emeritus of
Computer Science at
Stanford

Author of The Art of
Computer Programming

"Father of algorithmic
analysis"

Creator of TeX
In 1986, Knuth was asked to write a guest
feature for the "Programming Pearls" column in
the Communications of the ACM journal.

The task was to write a program that would:
read a file of text, determine the n most
frequently used words, and print out a sorted
list of those words along with their frequencies.
Knuth produced a solution in Pascal that, when
printed, was about 10 pages in length. It was
well designed, thoroughly commented, and
used a novel data structure for managing the
word count list.
In response, Doug McIlroy wrote a shell script
that produced the same output.
In response, Doug McIlroy wrote a shell script
that produced the same output.

McIlroy's script was six lines long.
Doug McIlroy's Shell Script
tr -cs A-Za-z 'n' |
tr A-Z a-z |
sort |
uniq -c |
sort -rn |
sed ${1}q
A brief history of shells
1971: Thompson shell
    ● Ken Thompson, Bell Labs, first Unix shell
    ● interactive interpreter, not scripting environment

1977: 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
A brief history of shells
1978: 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.2

1983: 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
A brief history of shells
1989: 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 syntax

1990: Z shell
    ● most closely resembles Korn shell
    ● /bin/bash compatibility, drop-in replacement for Bash
    ● "new" (despite being over 20 years old)
    ● awesome stuff I'll talk about next
Why use zsh?
First, a reason that's
   kind of lame...
If you're using Mac OS X...
... your Bash is old!



(OS X 10.8.2... and many earlier OS X versions too)
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)
Examples of Actual Zsh
   Awesomeness
zsh: cd completion
zsh: cd completion
zsh: cd completion
bash: cd completion
bash: cd completion
bash: cd completion
zsh: git completion
zsh: git completion
bash: git completion
bash: git completion




It's possible to get completion for git (and many other commands) in Bash
by installing bash-completion package, but the completion is still
rudimentary 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-place

There may be ways to improve that situation and bring it more in line with
zsh, but with zsh, you get it basically out-of-the-box, with a single command
in your .zshrc to enable completions.
zsh: path expansion




           (hit TAB, and then...)
zsh: path expansion




 (... the path is expanded in place, provided there is only
               one path matching that pattern)
zsh: path expansion




 (If there isn't only one distinct match for the pattern...)
zsh: path expansion




(... the first TAB will expand up until it hits an ambiguity... )
zsh: path expansion




    (... the next TAB lists the possible matches... )
zsh: path expansion




 (... then TAB begins cycling through the possibilities... )
zsh: path expansion




 (... until you get to the one you want, and hit the Right
                    arrow to "select" it ... )
zsh: path expansion




  (... and then TAB resumes matching through the rest
                       of the path)
bash: path expansion?




           (hit TAB ... nothing)
zsh: path replacement




       (Whoops. I meant /usr/local/share)
zsh: path replacement
zsh: path replacement




           (no more "cd ../../../")
bash: path replacement?
zsh: right prompt
PROMPT (or PS1): left prompt (like bash)

RPROMPT (or RPS1): right prompt!
zsh: right prompt
zsh: spelling correction
zsh: spelling correction
zsh: spelling correction
zsh: aliases
Normal aliases:

alias ls='ls --color=auto'
zsh: aliases
Global aliases - appear anywhere in command
string

alias -g gp='| grep -i'

% ps ax gp ruby
=> ps ax | grep -i ruby
zsh: aliases
Suffix aliases - "Open With..."

alias -s rb=vim
alias -s log="less -MN"
alias -s html=chromium

% user.rb
=> vim user.rb
% development.log
=> less -MN development.log
% index.html
=> chromium index.html
zsh: extended globbing




Normal globbed search
zsh: extended globbing




Extended globbed search: **/ = recursive
zsh: environment variable editing
zsh: programmable file renaming
zsh-history-substring-search




Down arrow = cycle through command history
zsh-history-substring-search




Type part of command and hit up arrow, cycle through only
commands that begin with that string
zsh-syntax-highlighting




Highlights valid commands in green, invalid commands in
red

Supports shell commands as well as executables in $PATH
oh-my-zsh
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 destinations

And, apparently, plenty of other stuff deeper than I've
gotten so far.
The End




          Go 49ers

More Related Content

What's hot

Berkeley Packet Filters
Berkeley Packet FiltersBerkeley Packet Filters
Berkeley Packet FiltersKernel TLV
 
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBLinux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBshimosawa
 
Slab Allocator in Linux Kernel
Slab Allocator in Linux KernelSlab Allocator in Linux Kernel
Slab Allocator in Linux KernelAdrian Huang
 
F9: A Secure and Efficient Microkernel Built for Deeply Embedded Systems
F9: A Secure and Efficient Microkernel Built for Deeply Embedded SystemsF9: A Secure and Efficient Microkernel Built for Deeply Embedded Systems
F9: A Secure and Efficient Microkernel Built for Deeply Embedded SystemsNational Cheng Kung University
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machineAlexei Starovoitov
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelAdrian Huang
 
Address/Thread/Memory Sanitizer
Address/Thread/Memory SanitizerAddress/Thread/Memory Sanitizer
Address/Thread/Memory SanitizerPlatonov Sergey
 
Easiest way to start with Shell scripting
Easiest way to start with Shell scriptingEasiest way to start with Shell scripting
Easiest way to start with Shell scriptingAkshay Siwal
 
Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)RuggedBoardGroup
 
High-Performance Haskell
High-Performance HaskellHigh-Performance Haskell
High-Performance HaskellJohan Tibell
 
zsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminarzsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminarhama7230
 
Linux MMAP & Ioremap introduction
Linux MMAP & Ioremap introductionLinux MMAP & Ioremap introduction
Linux MMAP & Ioremap introductionGene Chang
 
System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022Stefano Stabellini
 

What's hot (20)

Introduction to Linux Drivers
Introduction to Linux DriversIntroduction to Linux Drivers
Introduction to Linux Drivers
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Berkeley Packet Filters
Berkeley Packet FiltersBerkeley Packet Filters
Berkeley Packet Filters
 
MPI
MPIMPI
MPI
 
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBLinux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKB
 
Slab Allocator in Linux Kernel
Slab Allocator in Linux KernelSlab Allocator in Linux Kernel
Slab Allocator in Linux Kernel
 
F9: A Secure and Efficient Microkernel Built for Deeply Embedded Systems
F9: A Secure and Efficient Microkernel Built for Deeply Embedded SystemsF9: A Secure and Efficient Microkernel Built for Deeply Embedded Systems
F9: A Secure and Efficient Microkernel Built for Deeply Embedded Systems
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machine
 
Introduction to Linux
Introduction to LinuxIntroduction to Linux
Introduction to Linux
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux Kernel
 
Address/Thread/Memory Sanitizer
Address/Thread/Memory SanitizerAddress/Thread/Memory Sanitizer
Address/Thread/Memory Sanitizer
 
Easiest way to start with Shell scripting
Easiest way to start with Shell scriptingEasiest way to start with Shell scripting
Easiest way to start with Shell scripting
 
The Internals of "Hello World" Program
The Internals of "Hello World" ProgramThe Internals of "Hello World" Program
The Internals of "Hello World" Program
 
Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)
 
High-Performance Haskell
High-Performance HaskellHigh-Performance Haskell
High-Performance Haskell
 
zsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminarzsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminar
 
LLVM introduction
LLVM introductionLLVM introduction
LLVM introduction
 
Linux MMAP & Ioremap introduction
Linux MMAP & Ioremap introductionLinux MMAP & Ioremap introduction
Linux MMAP & Ioremap introduction
 
System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
 

Viewers also liked

Why zsh is Cooler than Your Shell
Why zsh is Cooler than Your ShellWhy zsh is Cooler than Your Shell
Why zsh is Cooler than Your Shellbrendon_jag
 
Kibanaでログを可視化してみた
Kibanaでログを可視化してみたKibanaでログを可視化してみた
Kibanaでログを可視化してみたDaigou Harada
 
Vim your Python, Python your Vim
Vim your Python, Python your VimVim your Python, Python your Vim
Vim your Python, Python your VimMiroslav Šedivý
 
Zsh shell-for-humans
Zsh shell-for-humansZsh shell-for-humans
Zsh shell-for-humansJuan De Bravo
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkTakaaki Hoyo
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Yohei Yasukawa
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシンShinya Shimizu
 
Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Takaaki Umada
 
SVMについて
SVMについてSVMについて
SVMについてmknh1122
 
Design Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについてDesign Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについてTakaaki Umada
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 

Viewers also liked (15)

Why zsh is Cooler than Your Shell
Why zsh is Cooler than Your ShellWhy zsh is Cooler than Your Shell
Why zsh is Cooler than Your Shell
 
Kibanaでログを可視化してみた
Kibanaでログを可視化してみたKibanaでログを可視化してみた
Kibanaでログを可視化してみた
 
目指せグラフマスター
目指せグラフマスター目指せグラフマスター
目指せグラフマスター
 
Vim your Python, Python your Vim
Vim your Python, Python your VimVim your Python, Python your Vim
Vim your Python, Python your Vim
 
Vim kindergarten
Vim kindergartenVim kindergarten
Vim kindergarten
 
Vim Rocks!
Vim Rocks!Vim Rocks!
Vim Rocks!
 
Zsh shell-for-humans
Zsh shell-for-humansZsh shell-for-humans
Zsh shell-for-humans
 
Vim Hacks
Vim HacksVim Hacks
Vim Hacks
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン
 
Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要
 
SVMについて
SVMについてSVMについて
SVMについて
 
Design Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについてDesign Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについて
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 

Similar to Why Zsh is Cooler than Your Shell

Linux: Beyond ls and cd
Linux: Beyond ls and cdLinux: Beyond ls and cd
Linux: Beyond ls and cdjacko91
 
101 3.2.1 how-to colors and prompts in bash
101 3.2.1 how-to colors and prompts in bash101 3.2.1 how-to colors and prompts in bash
101 3.2.1 how-to colors and prompts in bashAcácio Oliveira
 
3.1.b how to - colors and prompts in bash
3.1.b how to - colors and prompts in bash3.1.b how to - colors and prompts in bash
3.1.b how to - colors and prompts in bashAcácio Oliveira
 
Linux history & features
Linux history & featuresLinux history & features
Linux history & featuresRohit Kumar
 
Unleash your inner console cowboy
Unleash your inner console cowboyUnleash your inner console cowboy
Unleash your inner console cowboyKenneth Geisshirt
 
basic shell scripting syntex
basic shell scripting syntexbasic shell scripting syntex
basic shell scripting syntexKsd Che
 
Bash shell programming in linux
Bash shell programming in linuxBash shell programming in linux
Bash shell programming in linuxNorberto Angulo
 
Unix Shell Tricks for Rails Developers
Unix Shell Tricks for Rails DevelopersUnix Shell Tricks for Rails Developers
Unix Shell Tricks for Rails DevelopersMatthew Swain
 
Introduction to-linux
Introduction to-linuxIntroduction to-linux
Introduction to-linuxkishore1986
 
Introduction to-linux
Introduction to-linuxIntroduction to-linux
Introduction to-linuxrowiebornia
 
Introduction-to-Linux.pptx
Introduction-to-Linux.pptxIntroduction-to-Linux.pptx
Introduction-to-Linux.pptxDavidMaina47
 
Introduction khgjkhygkjiyhgikjyhgikygkii
Introduction khgjkhygkjiyhgikjyhgikygkiiIntroduction khgjkhygkjiyhgikjyhgikygkii
Introduction khgjkhygkjiyhgikjyhgikygkiicmdept1
 
101 3.1 gnu and unix commands
101 3.1 gnu and unix commands101 3.1 gnu and unix commands
101 3.1 gnu and unix commandsAcácio Oliveira
 

Similar to Why Zsh is Cooler than Your Shell (20)

Linux: Beyond ls and cd
Linux: Beyond ls and cdLinux: Beyond ls and cd
Linux: Beyond ls and cd
 
101 3.2.1 how-to colors and prompts in bash
101 3.2.1 how-to colors and prompts in bash101 3.2.1 how-to colors and prompts in bash
101 3.2.1 how-to colors and prompts in bash
 
3.1.b how to - colors and prompts in bash
3.1.b how to - colors and prompts in bash3.1.b how to - colors and prompts in bash
3.1.b how to - colors and prompts in bash
 
Linux history & features
Linux history & featuresLinux history & features
Linux history & features
 
Linux Basics
Linux BasicsLinux Basics
Linux Basics
 
Unleash your inner console cowboy
Unleash your inner console cowboyUnleash your inner console cowboy
Unleash your inner console cowboy
 
basic shell scripting syntex
basic shell scripting syntexbasic shell scripting syntex
basic shell scripting syntex
 
Bash shell programming in linux
Bash shell programming in linuxBash shell programming in linux
Bash shell programming in linux
 
Unix Shell Tricks for Rails Developers
Unix Shell Tricks for Rails DevelopersUnix Shell Tricks for Rails Developers
Unix Shell Tricks for Rails Developers
 
Introduction to-linux
Introduction to-linuxIntroduction to-linux
Introduction to-linux
 
Dev day linux redu
Dev day linux reduDev day linux redu
Dev day linux redu
 
tools
toolstools
tools
 
tools
toolstools
tools
 
Introduction-to-Linux.pptx
Introduction-to-Linux.pptxIntroduction-to-Linux.pptx
Introduction-to-Linux.pptx
 
Introduction to-linux
Introduction to-linuxIntroduction to-linux
Introduction to-linux
 
Introduction-to-Linux.pptx
Introduction-to-Linux.pptxIntroduction-to-Linux.pptx
Introduction-to-Linux.pptx
 
Introduction khgjkhygkjiyhgikjyhgikygkii
Introduction khgjkhygkjiyhgikjyhgikygkiiIntroduction khgjkhygkjiyhgikjyhgikygkii
Introduction khgjkhygkjiyhgikjyhgikygkii
 
Bash production guide
Bash production guideBash production guide
Bash production guide
 
Suman bhatt
Suman bhattSuman bhatt
Suman bhatt
 
101 3.1 gnu and unix commands
101 3.1 gnu and unix commands101 3.1 gnu and unix commands
101 3.1 gnu and unix commands
 

Why Zsh is Cooler than Your Shell