У меня есть символическая ссылка:
/path/to/foo -> /path/to/bar/foo
Когда в /path/to/foo
я могу захотеть перейти на /path/to/bar/foo
:
Затем ничего не завершается автоматически . Тем не менее, я все еще могу Почему это? Могу ли я применить настройку или трюк, чтобы завершить эту вкладку? $ cd ../
Tab kbd> [ 117] cd
просто набрать в каталоге "bar".
Это ошибка в завершении bash (сторонний проект, не связанный с самим bash). /etc/bash_completion
по умолчанию поставляется в ~/.bashrc
в Ubuntu, и среди тысяч строк кода (большинство из которых вам, вероятно, никогда не понадобятся) является функцией завершения для встроенной функции cd
, которая не обрабатывает каталоги с символическими ссылками должным образом , Если вы отключите его завершение для встроенной функции cd
, ваше завершение табуляции для cd
должно работать больше, чем вы ожидаете.
complete -r cd
Я думаю, что это разработано и как Bash обрабатывает текущий рабочий каталог.
Сравните выходные данные:
pwd
pwd -P
(Последний отображает физический текущий рабочий каталог вместо символьного. Pwd manual. )
Вы можете сделать так, чтобы Bash всегда использовал физический рабочий каталог, используя:
set -P
The [ 117] manual гласит:
-P Если установлено, оболочка не следует по символическим ссылкам при выполнении таких команд, как cd, которые изменяют текущий рабочий каталог. Вместо этого он использует физическую структуру каталогов. По умолчанию bash следует логической цепочке каталогов при выполнении команд, которые изменяют текущий каталог.
blockquote>В качестве побочного эффекта, когда вы
cd /path/to/foo
, вашpwd
будет:/path/to/bar/foo
.