Mengetik nama perintah dan path yang panjang adalah pekerjaan yang lambat dan rawan salah: satu huruf yang keliru membuat perintah gagal dijalankan. Untungnya shell memiliki asisten yang tidak pernah lelah, yaitu tombol Tab. Dengan tombol tersebut shell melengkapi sisa nama perintah, nama file, dan path yang kita mulai ketik. Pada Chapter ini kita akan memakai Tab completion untuk perintah dan path, mengintip daftar kandidatnya lewat compgen, lalu mengenal sekilas programmable completion yang membuat Tab memahami konteks perintah.
Menyelesaikan Nama Perintah dengan Tab #
Ketik awalan sebuah perintah lalu tekan Tab. Bila hanya ada satu kandidat yang cocok, shell melengkapi sisanya seketika; bila kandidatnya banyak, tekan Tab dua kali agar shell menampilkan seluruh kandidatnya di layar. Perilaku ini hanya terjadi di shell interaktif, sehingga buku ini menampilkan contoh tampilannya secara langsung dari sesi terminal:
$ cat dokumen/cata<Tab>
$ cat dokumen/catatan.txt
Setelah Tab ditekan, baris yang sama ditulis ulang secara langsung dengan kata cata yang sudah menjadi catatan.txt — kita tidak perlu mengetik sisa namanya. Kebiasaan kecil ini sekaligus menjadi pemeriksa ejaan bawaan: bila Tab tidak melengkapi apa pun, besar kemungkinan awalan yang kita ketik memang salah.
Mengintip Kandidat dengan compgen #
Semua kandidat yang ditawarkan Tab sebenarnya dihasilkan oleh builtin compgen. Perintah ini mencetak kandidat pelengkap dalam bentuk daftar biasa, sehingga kita bisa mengamatinya tanpa shell interaktif. Misalnya, untuk melihat perintah apa saja yang berawalan ta, gabungkan compgen dengan sort -u dan grep:
compgen -c | sort -u | grep '^ta'Output yang Dihasilkan:
tabs
tac
tail
tar
tasksetMari kita telaah alur pipeline di atas:
compgen -c: mencetak seluruh nama yang bisa dilengkapiTab— perintah diPATH, shell builtin, fungsi, dan alias; entri yang sama dapat muncul lebih dari sekali.sort -u: mengurutkan daftar sekaligus membuang duplikatnya.grep '^ta': menyaring hanya entri yang berawalanta.
Deretan kandidat tersebut persis yang tampil bila kita mengetik ta lalu menekan Tab dua kali. Daftar di komputer kita bisa berbeda karena isinya mengikuti program yang terpasang pada sistem masing-masing.
Menyelesaikan Path File dan Direktori #
Saat kata yang sedang diketik mengandung tanda /, Tab beralih ke mode path: kandidatnya adalah entri di dalam direktori yang ditunjuk. Dua bentuk compgen yang setara dengan perilaku tersebut adalah -A file untuk semua entri dan -d khusus direktori. Blok berikut menyiapkan folder latihan lalu membandingkan kedua bentuk itu:
mkdir -p dokumen/laporan dokumen/gambar
touch dokumen/catatan.txt dokumen/laporan.txt
echo "kandidat file dan direktori:"
compgen -A file 'dokumen/' | sort
echo "kandidat direktori saja:"
compgen -d 'dokumen/' | sortOutput yang Dihasilkan:
kandidat file dan direktori:
dokumen/catatan.txt
dokumen/gambar
dokumen/laporan
dokumen/laporan.txt
kandidat direktori saja:
dokumen/gambar
dokumen/laporanMari kita bedah baris per barisnya:
- Baris 1 (
mkdir -p ...): membuat subdirektorilaporandangambardi dalamdokumen, sekaligus direktoridokumenbila belum ada. - Baris 2 (
touch ...): membuat dua file kosong di dalamdokumensebagai bahan pelengkapan. - Baris 4 (
compgen -A file 'dokumen/'): mencetak semua entri di dalamdokumen— inilah kandidat yang tampil saat kita mengetikcat dokumen/lalu menekanTabdua kali;sortmenjaga urutannya rapi. - Baris 6 (
compgen -d 'dokumen/'): membatasi kandidat ke direktori saja, sehingga kedua file.txthilang dari daftar.
Perhatikan bahwa argumen 'dokumen/' berperan sebagai awalan yang sedang diketik. Sama seperti pelengkapan perintah, hasil ini mencerminkan isi folder pada mesin pembaca masing-masing.
Programmable Completion #
Bentuk-bentuk di atas melengkapi nama secara polos: kandidat disaring hanya dengan awalan. Bash memungkinkan yang jauh lebih pintar lewat programmable completion: aturan pelengkapan yang dipasang per perintah sehingga Tab memahami argumennya. Paket bash-completion yang terpasang di banyak distribusi, misalnya, membuat Tab melengkapi nama subperintah git, nama branch, opsi panjang, sampai nama host untuk ssh.
Aturan seperti itu didaftarkan lewat builtin complete, dan daftaran yang sedang aktif dapat dilihat dengan menjalankan complete -p — outputnya berupa deretan definisi aturan beserta fungsi generatornya. Penulisan aturan pelengkapan sendiri adalah bahasan lanjutan yang merujuk pada bagian Programmable Completion di halaman manual bash(1)
; sebagai pengguna, kita cukup menikmati hasilnya.
Dengan jari yang kini bekerja lebih sedikit, pertanyaan berikutnya adalah bagaimana mengetahui opsi-opsi yang bisa dilengkapi itu apa saja. Jawabannya ada di dokumentasi bawaan sistem — materi Chapter Help, Man Pages, dan Documentation.