Sepanjang Section Command Line kita bekerja secara interaktif: mengetik satu perintah, melihat hasilnya, lalu mengetik perintah berikutnya. Mulai section ini kita beralih ke scripting — menyimpan rangkaian perintah di dalam file agar pekerjaan berulang dijalankan sekali jalan — dan untuk itu kita perlu berkenalan dengan eksekutor semua perintah: shell. Chapter ini memetakan shell populer di Linux, cara memeriksa shell yang aktif, dan urutan file konfigurasinya saat dinyalakan.

Tiga Shell Populer: bash, zsh, dan fish #

Shell yang sejak Chapter Pengenalan Terminal menemani kita adalah bash — Bourne Again SHell, penerus shell sh klasik sekaligus bawaan hampir semua distribusi Linux. Dua pesaing yang paling sering dibicarakan adalah zsh dan fish, keduanya unggul dalam pengalaman interaktif:

Aspekbashzshfish
Posisibawaan mayoritas distro Linuxbawaan macOS sejak 2019dipasang manual
Skripstandar de facto, dekat dengan POSIXkompatibel dengan bash di banyak halsintaks sendiri, berbeda total
Fitur interaktiflengkap namun sederhanaautocompletion dan tema yang kayasaran perintah sambil mengetik
File konfigurasi.bashrc, .bash_profile.zshrcconfig.fish

zsh memikat lewat autocompletion yang cerdas dan kerangka seperti oh-my-zsh; fish menawarkan pewarnaan sintaks bawaan dan saran dari riwayat perintah. Namun keduanya membayar itu dengan kompatibilitas: skrip fish tidak kompatibel dengan bash, dan skrip zsh sesekali berperilaku berbeda meski sintaksnya tampak sama.

Memeriksa Shell yang Sedang Aktif #

Tiga pemeriksaan cepat: variabel BASH_VERSION selalu terisi di dalam bash, bash --version memberi laporan lengkap, dan /etc/shells memuat daftar shell yang sah untuk shell login:

bash
echo "$BASH_VERSION"
bash --version | head -1
cat /etc/shells

Output yang Dihasilkan:

text
5.2.37(1)-release
GNU bash, version 5.2.37(1)-release (x86_64-pc-linux-gnu)
# /etc/shells: valid login shells
/bin/sh
/usr/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/dash

Variabel BASH_VERSION hanya terisi di dalam bash — di zsh atau fish variabel tersebut kosong, jadi ini sekaligus detektor sederhana. Di komputer Anda daftar /etc/shells bisa lebih panjang bila zsh atau fish terpasang. Perhatikan dash: pada Debian, /bin/sh hanya tautan ke dash, shell ringan untuk skrip sistem.

Shell default akun terbaca dari variabel environment SHELL yang diisi proses login — contoh tampilannya di mesin budi:

console
budi@laptop-budi:~$ echo $SHELL
/bin/bash

Menggantinya dilakukan dengan chsh -s /bin/zsh: nama shell harus persis salah satu baris di /etc/shells, dan perubahan berlaku setelah login berikutnya.

File Startup: Urutan yang Dibaca Shell #

Shell membaca file konfigurasi hanya pada momen yang ditentukan cara shell dinyalakan. Tiga kondisi penting bagi kita:

  • Shell login — sesi yang dimulai saat proses login, misalnya konsol virtual atau SSH.
  • Shell interaktif non-login — jendela terminal baru di desktop.
  • Shell non-interaktif — shell yang menjalankan skrip.

Bash memilih file startup menurut tabel berikut:

KondisiFile sistemFile di home (urutan)
login/etc/profile~/.bash_profile, lalu ~/.bash_login, lalu ~/.profile — berhenti di yang pertama ada
interaktif non-login/etc/bash.bashrc~/.bashrc
non-interaktif (skrip)tidak adatidak ada

Mari kita buktikan urutan tersebut. Blok berikut menulis dua file kecil berisi echo, lalu memanggil bash dalam tiga mode; prefiks HOME="$PWD" menjadikan folder latihan sebagai home agar konfigurasi asli tidak tertimpa:

bash
printf 'echo ".bash_profile dijalankan"\n' > .bash_profile
printf 'echo ".bashrc dijalankan"\n' > .bashrc
echo "-- bash -c : skrip --"
HOME="$PWD" bash -c 'true'
echo "-- bash -lc : login --"
HOME="$PWD" bash -lc 'true'
echo "-- bash -ic : interaktif --"
HOME="$PWD" bash -ic 'true'

Output yang Dihasilkan:

text
-- bash -c : skrip --
-- bash -lc : login --
.bash_profile dijalankan
-- bash -ic : interaktif --
.bashrc dijalankan

Mari kita bedah hasil percobaan tersebut:

  1. Baris 1-2 (printf ... > .bash_profile dan > .bashrc): membuat dua file startup tiruan di folder aktif, masing-masing berisi satu perintah echo.
  2. Baris 4 (HOME="$PWD" bash -c 'true'): mode non-interaktif — tidak ada file startup yang dibaca, karena itu tidak ada output di antara dua penanda pertama.
  3. Baris 6 (HOME="$PWD" bash -lc 'true'): opsi -l menjadikan bash shell login, sehingga ~/.bash_profile dijalankan dan pesannya tampil.
  4. Baris 8 (HOME="$PWD" bash -ic 'true'): opsi -i menjadikan bash interaktif, sehingga ~/.bashrc yang dibaca — bukan .bash_profile.

Konsekuensi terpentingnya: skrip bash tidak membaca .bashrc secara otomatis, jadi alias dan fungsi dari .bashrc tidak tersedia di dalam skrip — karena itu banyak distribusi membuat ~/.bash_profile yang menjalankan ~/.bashrc. Aturan praktisnya: alias dan pengaturan interaktif di ~/.bashrc, variabel environment seperti PATH di ~/.profile. Urutan lengkapnya ada di bagian INVOCATION halaman manual bash(1) .

Peta shell kita kini lengkap: programnya, versinya, dan file konfigurasinya. Dengan bekal ini, kita siap menulis dan menjalankan skrip pertama — dimulai di Chapter Bash Basics.