Можна скористатися заповненням вкладки. За замовчуванням у багатьох дистрибутивах Linux, bash налаштовується так, що після натискання клавіші [TAB] вам надається список можливих збігів, або якщо є лише одна відповідність, все заповнюється. Для CD це звичайно перелік підкаталогів поточного робочого каталогу. Ви можете це перезаписати, але я пропоную замість цього створити псевдонім, наприклад, jd
для "каталогу стрибків":
alias jd=cd
а потім, визначивши потрібні "закладки" як доповнення до jd. Подивіться на сторінку bash man, щоб отримати набагато більше варіантів (включаючи автоматичне генерування результатів під час руху за допомогою команди чи функції), але найпростішим способом є лише список слів із -W
:
завершити -W "/ srv / www ~ / tmp ~ / робота" jd
Тепер наберіть jd
і натисніть [TAB], і ви побачите свої "закладки". Наберіть будь-яку неоднозначну частину та натисніть [TAB], щоб завершити. (У вищесказаному ~
s розгорнемось до мого домашнього каталогу, тому перший [TAB] видає мені a /
, і якщо я знову натисніть w
і [TAB], /srv/www
заповнюється.)
Звичайно, покладіть це, ~/.bash_profile
щоб воно зберігалося.
Або ми можемо перенести це на наступний рівень. Створіть каталог ~/.shortcuts
- починаючи з крапки, він буде прихований і не зіб'є ваш прекрасний чистий домашній каталог - і заповніть його посиланнями на потрібні каталоги. Потім помістіть це у свій ~ / .bash_profile:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
Це визначає дещо складніше завершення fuction _list_shortcuts
для складання списку імен, і робить jd
це функцією, а не простим псевдонімом, оскільки ми хочемо, щоб він діяв інакше, ніж просто cd
. -P
Прапор cd
робить його дозволити символічні посилання, так що все стає прозорою магією. Ваші імена ярликів навіть не повинні відповідати цілям.
Так:
$ 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
А щоб отримати додаткову дозу фантазії, складіть jd
список усіх ярликів, коли вони виконані без будь-яких параметрів:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
Примітка: Я використовую compgen -W $( cmd )
замість того, compgen -C 'cmd'
що останній ніколи не працює на мене, і я не розумію, чому. Це може бути новим моїм власним питанням. :)