Есть ли способ заставить трейлинг '/' появляться при использовании cd с каталогом символьных ссылок?

Я использую оболочку bash и использую множество мягких ссылок. Я наблюдаю одно незначительное, но раздражающее поведение: мне нужно дважды нажать на вкладку, чтобы завершить имя мягкой ссылки на каталог. например

$ mkdir dir1
$ ln -s dir1 link1

Используя автозаполнение, введя "cd d", вы получите "cd dir1/", но, введя "cd l", вы получите "cd link1", когда мне действительно хотелось бы, чтобы "cd link1/"

2 ответа

Я думаю, что вы ищете переменные readline mark-directories, а также mark-symlinked-directories, Просто добавьте следующее к вашему ~/.inputrc файл и перезагрузите его с помощью CtrlxCtrlr.

set mark-directories on
set mark-symlinked-directories on

Чтобы убедиться, что CtrlxCtrlr работает, вы также должны иметь следующее ~/.inputrc, (См. Этот вопрос.)

"\C-x\C-r": re-read-init-file

Кстати, если вы хотите отобразить текущие настройки переменных readline, используйте следующую команду: (См. Также man bash Больше подробностей.)

bind -v

Вкладка здесь действует как автозаполнение, все, что она делает, - это поиск соответствующих файлов и каталогов для завершения вашей команды.

Насколько я знаю, в Bash вы не можете сказать это делать по-другому, вы можете попробовать использовать другие оболочки, возможно, они могут.

Однако на самом деле нет разницы. поскольку обе команды доставят вас в один и тот же каталог...

Обновить

В соответствии с здесь вы можете использовать это, чтобы перейти к каталогу родителей:

Вот способ перехода к цели данной символической ссылки:

cd -P .

Вот как это работает

user@host:~/tmp$ ls 
@a b
user@host:~/tmp$ file a
a: symbolic link to `b/c'
user@host:~/tmp$ cd a
user@host:~/tmp/a$ cd .
user@host:~/tmp/a$ cd -P .a
user@host:~/tmp/b/c$

Вы можете псевдоним это

cdl='cd -P'

Из руководства по bash:

Опция -P говорит об использовании физической структуры каталогов вместо следующих символических ссылок

Другие вопросы по тегам