- Ringkasan cara meningkatkan kecepatan dan efisiensi kerja di lingkungan shell dengan memanfaatkan berbagai shortcut keyboard dan kombinasi perintah
- Shortcut dasar seperti CTRL + W, U, K, Y untuk mengedit baris, CTRL + A/E, ALT + B/F untuk memindahkan kursor, dan reset untuk memulihkan terminal
- Di Bash dan Zsh, CTRL + R untuk mencari riwayat perintah, !!·!$·ESC+. untuk memakai ulang perintah sebelumnya, serta Brace Expansion dan Globstar untuk mengotomatisasi pekerjaan berulang
- Fitur lanjutan seperti Process Substitution, tee, dan bg/disown membantu kontrol proses dan pengelolaan log menjadi lebih efisien
- Jika shell dikuasai seperti kotak peralatan, produktivitas dan fokus dapat meningkat, dan kuncinya adalah membiasakan shortcut satu per satu
Shortcut dan fitur dasar yang bekerja di hampir semua shell
-
Kombinasi CTRL + W, U, K, Y adalah shortcut edit baris untuk cepat menghapus atau memulihkan kata maupun bagian depan/belakang baris berdasarkan posisi kursor
CTRL + W menghapus kata di depan kursor
CTRL + U memotong dari kursor hingga awal baris, dan bisa ditempel kembali dengan CTRL + Y
CTRL + K memotong dari kursor hingga akhir baris
- CTRL + A / E berpindah ke awal dan akhir baris, ALT + B / F berpindah maju-mundur per kata
- Aktif secara default di sebagian besar terminal, dan di Mac tombol Option harus disetel sebagai Meta agar berfungsi
- Perintah reset atau stty sane dapat memulihkan terminal yang rusak karena tidak sengaja menampilkan file biner
- Meski layar rusak, input tetap bisa dilakukan, jadi ketik
reset lalu Enter untuk memulihkan
- CTRL + C / D masing-masing menghentikan perintah dan mengirim sinyal EOF (akhir file)
- Menekan
CTRL + D pada prompt kosong akan menutup shell
- CTRL + L setara dengan perintah
clear untuk segera membersihkan layar
- Prompt dipindahkan ke bagian atas layar sambil mempertahankan perintah yang sedang diketik
- cd - langsung berpindah ke direktori sebelumnya, sementara pushd / popd memungkinkan berpindah antar beberapa lokasi dengan stack direktori
- > file.txt mengosongkan file tanpa menghapusnya sehingga izin dan kepemilikan tetap dipertahankan
- Variabel $_ memakai ulang argumen terakhir dari perintah sebelumnya
- Contoh:
mkdir -p /path/newdir && cd "$_"
- set -e, set -u adalah opsi untuk meningkatkan keamanan skrip
set -e langsung keluar saat terjadi error
set -u memicu error saat mereferensikan variabel yang belum didefinisikan
- Kombinasi
set -euo pipefail memberi perlindungan yang lebih kuat
Shortcut dan fitur lanjutan di Bash dan Zsh
- CTRL + R melakukan pencarian inkremental mundur di riwayat perintah
- Saat kata kunci diketik, perintah lama bisa langsung ditemukan dan dipakai lagi
- !! menjalankan ulang seluruh perintah sebelumnya
sudo !! dapat menjalankan ulang perintah terakhir dengan hak administrator
- CTRL + X, CTRL + E membuka perintah yang sedang diketik di editor bawaan (Vim, Nano, dll.) untuk diedit lalu dijalankan
- Di Zsh perlu konfigurasi tambahan
- Perintah fc adalah cara tradisional untuk membuka perintah sebelumnya di
$EDITOR lalu mengeditnya
- ESC + . atau ALT + . menyisipkan argumen terakhir dari perintah sebelumnya di posisi kursor
- Jika ditekan berulang, argumen dari perintah yang lebih lama bisa diputar satu per satu
- !$ menjalankan fungsi yang sama secara non-interaktif
-
Brace Expansion adalah fitur ekspansi kurung kurawal untuk mengurangi input berulang
cp pf.conf{,.bak} → cp pf.conf pf.conf.bak
mv filename.{txt,md} → mv filename.txt filename.md
mkdir -p project/{src,tests,docs} membuat beberapa direktori sekaligus
- Process Substitution
<(command) memperlakukan output perintah seperti file
- Contoh:
diff <(sort file1.txt) <(sort file2.txt) untuk membandingkan tanpa file sementara
- Globstar(
**) menelusuri file secara rekursif hingga subdirektori
- Di Bash, aktifkan dengan
shopt -s globstar, sedangkan di Zsh aktif secara default
- Contoh:
ls **/*.js untuk mencari file JS di semua subfolder
-
Kombinasi CTRL + Z, bg, disown menjalankan proses di background dan melepaskannya dari shell
CTRL + Z untuk jeda sementara → bg untuk menjalankan di background → disown untuk melepaskannya dari shell
- Proses tetap bisa berjalan meski sesi SSH ditutup
- command |& tee file.log mengalirkan standard output (stdout) dan standard error (stderr) sekaligus ke pipe
|& adalah bentuk singkat dari 2>&1 |
- Dengan
tee, output tetap tampil di layar sambil disimpan ke log
Saran inti dalam memanfaatkan shell
- Shell adalah kotak peralatan, dan jika dikuasai dengan baik dapat sangat meningkatkan produktivitas
- Daripada menghafal semua shortcut sekaligus, lebih efektif untuk membiasakannya satu per satu
- Input berulang dan pengetikan yang tidak perlu bisa dikurangi untuk menyederhanakan alur kerja
- Jika sudah terbiasa, terminal bukan lagi hambatan, melainkan ruang kerja sendiri
3 komentar
Hampir semuanya adalah keybinding emacs, tetapi emacs sendiri nyaris tidak disebutkan; melihatnya belakangan ini banyak dibagikan sebagai tip membuat saya merasa zaman benar-benar sudah berubah. Library readline pada dasarnya mengimplementasikan keybinding emacs di mana-mana. Rasanya sudah hampir 20 tahun sejak semuanya beralih ke IDE, tetapi dari sudut pandang fosil yang masih memakai hal seperti gdbtui, saya jadi berpikir bahwa hal yang benar-benar bagus memang tidak pernah mati.
Komentar Hacker News
Saya merasa hidup saya berubah ketika memetakan ulang tombol panah atas
Sekarang saya tidak perlu menelusuri semua perintah, hanya mencari perintah yang diawali dengan teks yang sudah saya ketik
Misalnya setelah mengetik
tar -lalu menekan panah atas, opsi tar yang pernah dipakai sebelumnya langsung munculDi zsh bisa diatur seperti ini
.inputrc.inputrcMengaktifkan vim-mode di terminal terasa jauh lebih nyaman
Salah ketik tiga kata sebelumnya?
3bcwselesaiHapus seluruh baris dengan
cc, dan untuk edit yang rumit bisa langsung dibuka di (neo)vim denganvKalau Anda memang sudah memakai (neo)vim, ini ideal karena tidak perlu menghafal shortcut baru
ctrl-x+eadalah kompromi yang bagusset -o viSaya terkesan ada orang yang menaruh skrip bernama
\#di PATH supaya bisa mengomentari sebagian pipeline~/bin/noglobsaya taruh begini agar saat memanggil skrip zsh dari bash bisa menghindari konflik noglobmycmd1 #| mycmd2$PATHsayaCTRL+W biasanya menghapus sampai spasi sebelumnya, jadi seluruh
/var/log/nginx/ikut terhapusAlt+Backspace menghapus sampai sebelum karakter non-alfabet
Tapi hati-hati karena ini bisa bentrok dengan shortcut menutup tab browser
/dihapus dari pengaturan$WORDCHARS, Anda akan mendapatkan perilaku yang diinginkan (tautan referensi)Saya merekomendasikan meningkatkan pencarian riwayat dengan integrasi shell fzf
Video demo / Dokumentasi resmi
Ada satu trik yang sering saya pakai
Saat sedang mengetik perintah panjang lalu harus mengerjakan hal lain dulu, saya tidak membatalkannya dengan
Ctrl-C, melainkan mengubahnya menjadi komentar lalu menjalankannya agar tetap masuk ke riwayat"push-line-or-edit", dan di bash perilaku mirip bisa dibuat denganC-ulaluC-yctrl-u, lalu menempelkannya kembali denganctrl-y. Di zsh, proses ini bisa diotomatisasi denganalt-qalt-shift-3Anda bisa menambahkan#di depan perintah saat ini lalu pindah ke baris baruJudul bergaya LLM kurang menarik, tapi beberapa tip cukup berguna dan ingin saya coba
Sayang sekali brace expansion tidak terlalu cocok dengan tab completion. Akan bagus jika ada fitur untuk menduplikasi token terakhir atau menghapus ekstensi file
Saya memakai fungsi di zsh untuk mengecualikan perintah tertentu dari riwayat
Misalnya agar perintah berbahaya seperti
--forcetidak tersimpan di riwayatSaya memakai snippet di zsh untuk ekspansi otomatis alias global
Misalnya jika disetel
alias -G G='rg -s', maka saat mengetikcommand | Gakan otomatis diperluas menjadicommand | rg -sEkspansi terjadi otomatis saat menekan spasi, dan jika diketik sebagai
\aliasmaka ekspansi akan dilewatiAda fungsi “deep cd” buatan saya di
.bashrcFungsi ini otomatis berpindah ke direktori pertama yang mengandung string argumen yang diberikan
Awalnya saya kira akan lambat, tapi ternyata lebih sering saya pakai dari dugaan
jc, z, atau fzfRemapping tombol panah atas di atas itu, pengguna Emacs biasanya cukup pakai
c-r. Ujung dari tuning adalah setelan bawaan.