Sekme tamamlamayı kullanabilirsiniz. Varsayılan olarak birçok Linux dağıtımında, bash [TAB] tuşuna bastığınızda olası eşleşmelerin bir listesi verilir veya yalnızca bir eşleşme varsa tümü doldurulur. Cd için, bu normalde geçerli çalışma dizininin alt dizinlerinin listesidir. Bunun üzerine yazabilirsiniz, ancak bunun yerine jd
"atlama dizini" gibi bir takma ad oluşturmanızı öneririm :
alias jd=cd
ve sonra jd için tamamlama olarak istediğiniz "yer imlerini" tanımlayın. Çok fazla seçenek için bash adam sayfasına bak (dahil otomatik olarak oluşturarak bir komut veya işlevinden anında sonuçları), fakat en kolay yolu ile kelimeler, sadece bir listesidir -W
:
komple -W "/ srv / www ~ / tmp ~ / work" jd
Şimdi jd
[TAB] yazıp tıklayın, "yer işaretlerinizi" görürsünüz. Belirsiz bir parça yazın ve ardından tamamlamak için [SEKME] 'ye basın. (Yukarıda, ~
s ana dizinime genişler, böylece ilk [SEKME] bana bir verir /
ve eğer w
tekrar vurursam ve [SEKME] /srv/www
doldurulur.)
Tabii ki, ~/.bash_profile
devam ettirmek için bunu koy .
Veya bunu bir sonraki seviyeye taşıyabiliriz. Bir dizin olun ~/.shortcuts
- bir nokta ile başlayan, bu gizli ve güzel temiz ana dizini muss değil olacak - yani istediğiniz dizin sembolik ile ve dolguyu. Ardından, bunu ~ / .bash_profile dosyanıza koyun :
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Bu, _list_shortcuts
ad listesini oluşturmak için jd
işlevde biraz daha karmaşık bir tamamlamayı tanımlar ve basit bir takma addan ziyade basit bir takma addan ziyade bir işlev olmasını sağlar cd
. -P
İçin bayrak cd
yapar o sembolik çözmek, yani her şey şeffaf sihirli olur. Kısayol adlarınızın hedeflerle eşleşmesi bile gerekmez.
Yani:
$ 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
Ekstra bir fantezi için, jd
herhangi bir parametre olmadan yürütüldüğünde tüm kısayollarınızı listeleyin:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Not: Bunun compgen -W $( cmd )
yerine kullanıyorum compgen -C 'cmd'
çünkü ikincisi benim için hiç çalışmıyor ve nedenini anlamıyorum. Bu yeni bir soru olabilir. :)