Anda dapat menggunakan penyelesaian tab. Secara default pada banyak distribusi Linux, bash sudah diatur sehingga ketika Anda menekan tombol [TAB], Anda diberikan daftar kemungkinan kecocokan, atau jika hanya ada satu kecocokan, semuanya diisi. Untuk cd, ini biasanya daftar subdirektori dari direktori kerja saat ini. Anda bisa menimpanya, tapi saya sarankan daripada membuat alias, seperti jd
untuk "direktori melompat":
alias jd=cd
dan kemudian, mendefinisikan "bookmark" yang Anda inginkan sebagai pelengkap untuk jd. Lihatlah halaman bash man untuk lebih banyak opsi (termasuk menghasilkan secara otomatis hasil langsung dari perintah atau fungsi), tetapi cara termudah hanyalah daftar kata, dengan -W
:
lengkap -W "/ srv / www ~ / tmp ~ / work" jd
Sekarang, ketik jd
dan tekan [TAB], dan Anda akan melihat "bookmark" Anda. Ketik setiap bagian yang ambigu, dan kemudian tekan [TAB] untuk menyelesaikan. (Di atas, ~
s meluas ke direktori home saya, jadi [TAB] pertama memberi saya /
, dan jika saya menekan w
dan [TAB] lagi, /srv/www
diisi.)
Tentu saja, masukkan ini ~/.bash_profile
untuk membuatnya bertahan.
Atau, kita bisa membawa ini ke level selanjutnya. Buat direktori ~/.shortcuts
- dimulai dengan titik, itu akan disembunyikan dan tidak direproduksi direktori home bersih Anda - dan mengisinya dengan symlink ke direktori yang Anda inginkan. Kemudian, letakkan ini di ~ / .bash_profile Anda:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Ini mendefinisikan penyelesaian yang sedikit lebih rumit dalam fungsinya _list_shortcuts
untuk membangun daftar nama, dan menjadikannya jd
fungsi daripada alias sederhana, karena kita ingin itu bertindak berbeda dari adil cd
. The -P
bendera untuk cd
merek itu menyelesaikan symlink, sehingga semuanya menjadi sihir transparan. Nama pintasan Anda bahkan tidak harus sesuai dengan target.
Begitu:
$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm 8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work
Dan, untuk dosis mewah, buat jd
daftar semua pintasan Anda saat dijalankan tanpa parameter apa pun:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Catatan: Saya menggunakan compgen -W $( cmd )
bukan compgen -C 'cmd'
karena yang terakhir tidak pernah bekerja untuk saya dan saya tidak mengerti mengapa. Itu mungkin pertanyaan baru saya sendiri. :)