Praktik pertama yang nyata: menginstall zsh 5.9.2 di berbagai distro Linux dan macOS, memverifikasi dengan zsh --version, menjadikan Zsh sebagai default shell dengan chsh -s $(which zsh), lalu menulis skrip pertama dengan shebang #!/usr/bin/env zsh beserta cara membuatnya executable

Setelah di episode 2 kita memahami arsitektur Zsh — mode interaktif vs non-interaktif, urutan startup files, dan komponen inti — pada episode ini kita mulai praktik sungguhan: menginstall Zsh dan menulis Hello World pertama. Ini adalah momen di mana semua teori mulai menjadi nyata di terminal kalian.
Mengapa instalasi perlu dibahas dengan benar? Karena versi Zsh sangat menentukan fitur yang tersedia, dan cara install yang salah (misalnya membangun dari source tanpa konfigurasi) bisa menghasilkan binary yang kehilangan fitur penting seperti completion system. Kita targetkan zsh 5.9.2 — versi stabil terbaru per 12 Juli 2026 — sesuai outline series ini.
Debian dan Ubuntu menyediakan zsh di repository resmi. Paketnya sudah lengkap dengan completion system dan dokumentasi.
sudo apt update
sudo apt install zshsudo pacman -S zshsudo dnf install zshmacOS sudah membundel zsh sebagai default shell sejak Catalina. Namun versi yang dibundel bisa tertinggal — untuk mendapatkan 5.9.2 gunakan Homebrew:
brew install zshSetelah install, verifikasi selalu dengan dua perintah berikut:
zsh --version
which zshOutput yang diharapkan kurang lebih:
zsh 5.9.2 (x86_64-pc-linux-gnu)
/usr/bin/zshWarning
Pastikan which zsh menunjuk ke binary yang benar. Setelah brew install zsh di macOS, binary ada di /opt/homebrew/bin/zsh — jika which zsh masih menunjuk ke /bin/zsh (bundled), perbaiki PATH agar versi Homebrew yang menang.
Setelah zsh terinstall, kalian bisa menjadikannya default. Ada dua cara: chsh (untuk user biasa) dan usermod (dengan sudo, untuk user lain).
chsh -s $(which zsh)
# verifikasi di /etc/passwd
grep "^$USER" /etc/passwdUntuk cek perubahan, keluar dan login ulang, atau jalankan:
echo $SHELLTip
Di beberapa setup (misalnya Docker container atau lingkungan CI), /etc/shells harus berisi path zsh sebelum chsh mau bekerja. Jika chsh menolak, tambahkan dulu $(which zsh) ke /etc/shells.
Langsung dari prompt Zsh:
echo "Hello Zsh"
print "Hello dari print"Perhatikan: Zsh punya print bawaan yang lebih fleksibel daripada echo — ia mendukung print -l (per baris), print -P (expand prompt escapes), dan print -n (tanpa newline). Kita pakai print banyak di episode 16.
Sekarang tulis skrip pertama. Nama file bebas; konvensi series ini memakai ekstensi .zsh agar jelas itu skrip Zsh.
#!/usr/bin/env zsh
# Skrip pertama Belajar Zsh
name="Zsh"
echo "Hello $name"
echo "Versi: $ZSH_VERSION"Baris pertama #!/usr/bin/env zsh adalah shebang — ia memberi tahu sistem bahwa skrip ini harus dijalankan dengan zsh. Menggunakan env lebih portabel daripada hardcode path seperti #!/bin/zsh, karena env mencari zsh lewat PATH (penting untuk setup Homebrew di macOS).
chmod +x script.zsh
./script.zshTiga hal yang terjadi: chmod +x membuat file executable, ./script.zsh dieksekusi sebagai program (kernel membaca shebang), lalu zsh menjalankan isi skrip.
zsh script.zshCara zsh script.zsh tidak butuh executable bit — zsh langsung membaca file sebagai input. Ini berguna saat menulis skrip yang belum di-chmod.
Ingat konsep episode 2? Coba bedakan sendiri ketiga cara menjalankan:
# 1. Skrip non-interaktif: tidak membaca .zshrc
zsh -c 'echo "$ZSH_VERSION"'
# 2. Interaktif: masuk sesi zsh baru
zsh
# 3. Non-interaktif, langsung exit
zsh -c 'exit'# Definisikan variabel di .zshrc dulu, lalu:
alias ll="ls -l"
zsh -c 'alias ll' # kemungkinan kosong (skrip tak baca .zshrc)Inilah alasan mengapa alias yang didefinisikan di .zshrc tidak tersedia di dalam skrip — dan kenapa di episode 16 kita belajar menulis skrip yang tidak bergantung pada alias.
apt/pacman/dnf/brew sesuai platform; target 5.9.2.zsh --version dan which zsh; perbaiki PATH jika perlu.chsh -s $(which zsh); pastikan /etc/shells berisi path zsh.echo/print interaktif, dan skrip script.zsh dengan shebang #!/usr/bin/env zsh yang di-chmod +x.zsh -c non-interaktif tidak membaca .zshrc.Inti yang harus dibawa pulang:
zsh --version.chsh -s $(which zsh) menjadikan Zsh default; usermod untuk user lain.#!/usr/bin/env zsh paling portabel untuk skrip..zshrc — desain, bukan bug.Di episode 4 selanjutnya kita akan membahas sintaks dasar dan kompatibilitas dengan bash — variabel dan array (yang ternyata 1-indexed di Zsh!), tied array $path/$PATH, serta daftar perbedaan penting antara Zsh dan bash yang wajib kalian hafal agar skrip kalian tidak "meledak" diam-diam. Sampai jumpa di episode 4!