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:
| Aspek | bash | zsh | fish |
|---|---|---|---|
| Posisi | bawaan mayoritas distro Linux | bawaan macOS sejak 2019 | dipasang manual |
| Skrip | standar de facto, dekat dengan POSIX | kompatibel dengan bash di banyak hal | sintaks sendiri, berbeda total |
| Fitur interaktif | lengkap namun sederhana | autocompletion dan tema yang kaya | saran perintah sambil mengetik |
| File konfigurasi | .bashrc, .bash_profile | .zshrc | config.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:
echo "$BASH_VERSION"
bash --version | head -1
cat /etc/shellsOutput yang Dihasilkan:
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/dashVariabel 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:
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:
| Kondisi | File sistem | File 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 ada | tidak 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:
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:
-- bash -c : skrip --
-- bash -lc : login --
.bash_profile dijalankan
-- bash -ic : interaktif --
.bashrc dijalankanMari kita bedah hasil percobaan tersebut:
- Baris 1-2 (
printf ... > .bash_profiledan> .bashrc): membuat dua file startup tiruan di folder aktif, masing-masing berisi satu perintahecho. - 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. - Baris 6 (
HOME="$PWD" bash -lc 'true'): opsi-lmenjadikan bash shell login, sehingga~/.bash_profiledijalankan dan pesannya tampil. - Baris 8 (
HOME="$PWD" bash -ic 'true'): opsi-imenjadikan bash interaktif, sehingga~/.bashrcyang 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.